不变初心数思路问题提问

img


各位,这个不变初心数我感觉我这样写没毛病呀
首先将输入的这个x的各个位数和算出来定义为sum
其次在用循环算出x的2.3.4.5.6.7.8.9倍为t,在算出t的各个位数和为s
然后判断s与sum是否相等,用y这个变量来控制是否为不变初心数
感觉没毛病呀,希望各位能帮我看一下问题出在哪里

应该是因为这个数乘以2,3,4,5,6,7,8,9之后乘积的各数位之和的存储变量s的初始化的位置不对,因为在计算每个乘积的数位之和之前,其和都要初始化为0,所以把它放到第20行for循环里面,第22行while循环前即可,修改如下:

参考链接:

#include <stdio.h>

int main(void){
    
    int n;
    scanf("%d",&n);
    int j;
    for(j=1;j<=n;j++){
        
        int x;
        //   https://blog.csdn.net/weixin_53338919/article/details/116592736
        scanf("%d",&x);
        int sum=0,a=x;
        while(a>0){
            int b=a%10;
            sum+=b;
            a/=10;
        }
        
        int i,y=1,s;
        for(i=2;i<=9;i++){
            
            int t=i*x;
            s=0;
            while(t>0){
                int d=t%10;
                s+=d;
                t/=10;
            }
            
            if(s!=sum){
                y=0;
                break;
            }
        }
        
        if(y==0){
            printf("NO\n");
        }else {
            printf("%d\n",sum);
        }
    }
    
    return 0;
} 

img