题目大意:
Smith数的定义是各位数字之和与它的各个质因数(可以重复)的各位数字之和的总和相同的数,且不是素数。给一个数n,算出比n大的最小的Smith数。
解题思路:
从n+1开始遍历
代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int CalDigitsSum(int num)
{
int sum=0;
while(num)
{
sum+=num%10;
num/=10;
}
return sum;
}
int PrimaryCal(int num)
{
int total=0;
int tempNum=num;
int i;
int temp;
for(i=2;i*i<=num;i++)
{
if(num%i==0)
{
temp=CalDigitsSum(i);
}
while(num%i==0)
{
total+=temp;
num/=i;
}
}
if(tempNum==num)
{
return -1;
}
if(num!=1)
{
total+=CalDigitsSum(num);
}
return total;
}
int main()
{
int n,i;
while(scanf("%d",&n)&&n)
{
for(i=n+1;;i++)
{
if(CalDigitsSum(i)==PrimaryCal(i))
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
6336

被折叠的 条评论
为什么被折叠?



