求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
int fun(int m, int n)// 计算m的n次方
{
if (n != 0)
return m * fun(m, n - 1);
else
{
return 1;
}
}
void main()
{
int i = 0;
for (i = 1; i<100000; i++)//这里也可以修改范围i<()
{
int tmp = i;
int n = 0;//计算当前tmp的位数n
while (tmp)
{
tmp = tmp / 10;
n++;
}
int sum = 0; //求和
tmp = i;//重新将tmp赋值i
while (tmp)
{
int m = tmp % 10;//m保存当前m的个位数
int res = fun(m, n);//调用函数计算每个数的次方
tmp /= 10;//tmp左移
sum += res;//各个数的次方和
}
//判断
if (sum == i)
printf("%d是水仙数", i);
}
}