水仙花数是指一个 n 位数 ( 5=>n >= 3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)给出一个整数M,求 >= M的最小的水仙花数。
void shuixianhua(int a[])
{
for(i=1;i<=9999;i++)
{
o=i;
int sum,sum1=0;
while(o)//记录每个数
{
k=o%10;
p=log10(i)+1;
sum=1;
while (p)
{
if (p%2 == 1) {
sum = (sum * k);
} //判断是否是奇数,是奇数的话将多出来的数事先乘如sum
p /= 2;
k = (k * k);// 不断的两两合并再取模,减小a和b的规模
}
sum1+=sum;
o/=10;
}
if( sum1 == i)
{
a[i]=1;//记录完美数
}
}
}