对于正整数n,不存在整数k,使得n等于k加上k的数码累加和,我们称这样的数是哥伦比亚数或者自我数。
比如 11就不是一个哥伦比亚数,因为10加上10的数码累加和1等于11;而20则是一个哥伦比亚数。
第一行是一个整数K(K≤10,000),表示样例的个数。
以后每行一个正整数n(1≤n≤1,000,000,000)
每行输出一个样例的结果,如果是哥伦比亚数输出"Yes",否则输出"No"。
5 1 2 3 20 21
Yes No Yes Yes No
AC代码
#include<stdio.h>
int main(){
int K;
scanf("%d",&K);
while(K--){
int n;
scanf("%d",&n);
int i,flag=1,sum;
for(i=1;i<=81;i++){
sum=0;
int num=n-i;
while(num){
sum+=(num%10);
num/=10;
}
if(sum==i){
flag=0;
break;
}
}
if(flag)printf("Yes\n");
else printf("No\n");
}
}
解题思路:显然数码和最大值为81,利用数码和进行循环,这样最多循环81次,不会超时。数码和为i,则数为n-i,在判断该数的数码和是否等于i,等于说明不是哥伦比亚数。