描述
不变初心数是指这样一种特别的数,它分别乘 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 就是它的初心。
编写程序,输出指定范围内[ a, b ] 的所有不变初心数。
输入
一行中给出2个正整数a和b,且 a \leq b \leq10^5a≤b≤105 。
输出
按照从小到大的顺序输出每个不变初心数,每行一个,每个不变初心数的输出格式为:不变初心数(初心)
。
如果在[ a, b ] 不存在不变初心数,则输出:None
。
输入样例 1
10 100
输出样例 1
18(9) 45(9) 90(9) 99(18)
#include<stdio.h>
int f(int a)
{
int t,s=0;
while(a)
{
t=a%10;
s=s+t;
a=a/10;
}
return s;
}
int main(int argc,char *argv[])
{
int a,b,z=0;
scanf("%d %d",&a,&b);
int i,k,s;
for(i=a;i<=b;i++)
{
int j,count=0;
for(j=1;j<=8;j++)
{
k=f(j*i);
s=f((j+1)*i);
if(s==k)
{
count++;
}
}
if(count==8)
{printf("%d(%d)\n",i,s);
z++;}
}
if(z==0)
printf("None");
}
看题目后直接先写一个函数获得相乘后各位数相加的和,k是本位,s是下一位,2者相比较。但要保证2者一直是一致相等的,故用count计数,9个数比较8次,若count没等于8则必定不满足初心数。最后用z来判断区间上是否有初心数,没有则输出none。