哥伦比亚数求优化不超时间

对于正整数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;
}