对于正整数n,不存在整数k,使得n等于k加上k的数码累加和,我们称这样的数是哥伦比亚数或者自我数。
比如 11就不是一个哥伦比亚数,因为10加上10的数码累加和1等于11;而20则是一个哥伦比亚数。
#include<stdio.h>
int main(){
int a,b,c,i,j,k;
int sum=0,t=0;
scanf("%d",&a);
while(a>0){
scanf("%d",&i);
for(j=1;j<i;sum=0){
k=j;
do{
b=k%10;
k/=10;
sum+=b;
} while(k>0);
if(i==j+sum){
printf("No\n");
t=1;
}
j++; }
if(t==0){
printf("Yes\n");
}
t=0;
a--;
}
}
超时了,求优化
供参考:
#include <stdio.h>
int main()
{
int a, t, i, j, k, s;
scanf("%d", &a);
while (a--)
{
scanf("%d", &i);
t = 1;
for (j = i - 1; j > 0 && j > i - 81; j--)
{
s = j; k = j;
while (k)
{
s += k % 10;
k /= 10;
}
if (s == i)
{
t = 0;
break;
}
}
if (t == 1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
我感觉是你多写了个循环,最外层的while应该用不上
int main()
{
int a,b,c,i,j,k;
int sum=0,t=0;
scanf("%d",&i);
for(j=1;j<i;sum=0)
{
k=j;
do{
b=k%10;
k/=10;
sum+=b;
} while(k>0);
if(i==j+sum)
{
printf("No\n");
t=1;
return 0;
}
j++;
}
if(t==0){
printf("Yes\n");
}
return 0;
}