3639 - selfnumber

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

一个整数n,如果存在另一个整数i,i加上它各个数位上的数字刚好等于n, 就说n是selfnumber  例如n=51 i=39 

 39+3+9=51

你要做的很简单,输出1-x所有不是selfnumber的数。

x<=1000000  注意时限

题目输入

每一行输入x

题目输出

对应每一个x,每行输出一个selfnumber

输入/输出样例

输入格式

1
10

输出格式

1
1
3
5
7
9

C语言解答

#include<stdio.h>
#include<time.h>
int main()
{
	int i,j,n,k,t,c,q;
//	freopen("t.out","w",stdout);
//	freopen("t.in","r",stdin);
	while(scanf("%d",&n)==1)
	{
	for(i=1;i<=n;i++)
	{
		t=i;q=0;c=0;
		while(t>0){t/=10;q+=10;}
		for(j=i;(j>=i-q)&&j>0;j--)
		{
			t=j;k=j;
			while(k>0){t+=k%10;k/=10;}
			if(t==i){c=1;break;}
		}
		if(!c)printf("%d\n",i);
	}}
	return 0;
}

C++解答

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000005
int a[maxn];
int main()
{
	memset(a,0,sizeof(a));
	for (int i=1;i<=1000000;i++){
		char s[10];
		sprintf(s,"%d",i);
		int sum=i;
		for (int is=0;is<strlen(s);is++){
			sum+=(s[is]-'0');
		}
		a[sum]=1;
	}
	
	int n;
	while(~scanf("%d",&n)){
		for (int ik=1;ik<=n;ik++){
			if (!a[ik]){
				printf("%d\n",ik);
			}
		}
	}
	
	return 0;
}