对于正整数n,不存在整数k,使得n等于k加上k的数码累加和,我们称这样的数是哥伦比亚数或者自我数。

题目描述
对于正整数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

#include<stdio.h>
int main()
{
        int k,n,b,a,x,m,c=0,j,i=1,s=0;
        scanf("%d",&k);
        while(k--)
        {
            scanf("%d",&n);
            a=n;//a为数本身
            x=n;
            for(a;a>0;a--)
            {
                if(a==1)
                {
                    c=0;
                    break;
                }
                c=0;
                m=a;
                b=a;
              while(m>=10)
               {
                   m=m/10;
                   i++;//i表示位数
               }
               for(j=0;j<i;j++)
               {
                   s=b%10+s;//s为各位数和
                   b=b/10;
               }
               if(a+s==n)
               {
                   c=1;
                   break;
               }
            }
            if(c==1)
            {
                printf("No\n");
            }
            else
            {
                printf("Yes\n");
            }
        }
}

我想知道我哪里错了,求解

供参考

#include <stdio.h>
int main()
{
    int n,i,y,mark,sum,k;
    scanf("%d",&k);
    while(k--)
    {
        mark=1;    
        scanf("%d",&n);
        for(i=0;i<=81;i++)
        {
            
            y=n-i;
            if(y-i>=0)
            {
                sum=n-i;
                while(y)
                {
                    sum+=y%10;
                    y/=10;
                }
                if(sum==n)
                {
                    mark=0;
                    break;//跳出循环
                }
            }
            else
            {
                break;//跳出循环
            }
        }
        if(mark==0)
        {
            printf("No\n");
        }
        else
        {
            printf("Yes\n");
        }
    }
    return 0;
}

首先一点,你这个程序可读性太差了。你变量起名别这么起。你如果把变量起名弄的很清楚,你就会发现,你这个程序中的i 和s是作为循环过程中的标识作用的,但你循环内部没有初始化动作,就造成了你两个数的累计。不明白,请追问,明白请采纳+点赞。呵呵,耗费了我一个小时的周末时间呢。
代码改动如下:

img