不变初心数
是指这样一种特别的数,它分别乘 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;
}
}
}
}
题主代码修改如下,改动处见注释,供参考:
#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;
}