不变初心数,几个点没考虑到

不变初心数
是指这样一种特别的数,它分别乘 23456789 时,所得乘积各位数之和却不变。例如 18 就是这样的数:18 的 2 倍是 36,3+6=9;18 的 3 倍是 54,5+4=9;…… 18 的 9 倍是 162,1+6+2=9。对于 18 而言,9 就是它的初心。本题要求你判断任一个给定的数是否有不变的初心。

输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一个不超过 10 的5次方的正整数。

输出格式:
对每个给定的数字,如果它有不变的初心,就在一行中输出它的初心;否则输出 NO。

#include<stdio.h>
int main(){
    int a[100],n,i,t,s,j,cnt=0,t1,t2;
    scanf("%d",&n);
    for(i=0;i<n;i++)scanf("%d",&a[i]);
    for(i=0;i<n;i++){
        s=0;
        for(j=2;i<=9;j++){
            t2=a[i];
            s=0;
            t2*=j;//t2用来*2*3*4
            while(t2>0){
                t=t2%10;
                t2/=10;
                s+=t;
            }
            if(cnt==0){//第一次
                t1=s;
                cnt++;
            }else{
                if(t1==s){
                    printf("%d\n",t1);
                }else{
                    printf("NO\n");
                }
                cnt=0;
                break;                
            }
        }
    }
}

img

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

题主代码修改如下,改动处见注释,供参考:

#include<stdio.h>
int main(){
    int a[100],n,i,t,s,j,cnt=0,t1,t2;
    scanf("%d",&n);
    for(i=0;i<n;i++)scanf("%d",&a[i]);
    for(i=0;i<n;i++){
        cnt = 0; //s=0; 修改
        for(j=2;j<=9;j++){ //for(j=2;i<=9;j++) 修改
            t2=a[i];
            s=0;
            t2*=j;  //t2用来*2*3*4
            while(t2>0){
                t=t2%10;
                t2/=10;
                s+=t;
            }
            if(cnt==0){//第一次
                t1=s;
                cnt++;
            }else{
                if(t1==s){
                     ;    //printf("%d\n",t1); 修改
                }else{
                    break;//printf("NO\n");    修改
                }
                //cnt=0; 修改
                //break; 修改
            }
        }
        if (j >= 10)   // 修改
           printf("%d\n",t1);
        else           // 修改
           printf("NO\n");
    }
    return 0;
}