不变初心数是指这样一种特别的数,它分别乘 2、3、4、5、6、7、8、9 时,所得乘积各位数之和却不变。例如 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 行,每行给出一个不超过 105 的正整数。
输出格式:
对每个给定的数字,如果它有不变的初心,就在一行中输出它的初心;否则输出 NO
。
#include <stdio.h>
int main(){
int n,sum=0,i,t,j,a,f,c=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a);
t=a;//本题已经输入了t,所以下面可以用while(t)来判断
sum=0;
while(t)//意思是:只要t的值不为零,循环就继续下去
{
sum+=t%10;
t/=10;
}
f=sum;
//printf("%d ",f);
c=0;//记得让计数器清零啊清零,否则下一轮还是接着这一轮来的,你咋这么聪明捏
for(j=2;j<=9;j++)
{
t=a*j;
sum=0;
while(t)
{
sum+=t%10;
t/=10;
}
if(sum==f) c++;//每成功一次,计数器加一,若程序结束后计数器等于特定值,则okkkk
}
if(c==8) printf("%d\n",f);
else printf("NO\n");
}
return 0;
}
或
#include<stdio.h>
int main(void)
{ int n,m,a,b;
int sum1=0,sum2=0,c=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&m);
b=2*m;
while(b)
{
sum1=sum1+b%10;
b=b/10;
}
for(int j=3;j<=9;j++)
{
a=m*j;
while(a)
{
sum2=sum2+a%10;
a=a/10;
}
if(sum2==sum1)
{
c++;
}
sum2=0;
}
if(c==7)
{
printf("%d\n",sum1);
}
else
printf("no\n");
sum1=0;
c=0;
}
return 0;
}