C语言:计算所有N位水仙花数
输入数字 n 控制几位数
自动计算该位数中所有的回归数
程序边界3至7位数
#include<stdio.h>
#include<stdlib.h>
void main()
{
int n; //位数,需要输入
int min,max; //n位数的最小、最大数,当n确定后,如n=5:则min是10000,max是99999
int data; //要判断的数据,循环取从min到max的数,循环体内判断data是不是水仙花数
// 判断n位数data是否水仙花数,即判断data的每位数的n次幂的和是否等于data本身。
int temp,d; //取组成data的每位数所需的变量。
// data分解成(其他位+最低位),temp是取掉最低位的其他位,d是取到的最低位,如12345:temp=1234时d=5
int pow,i; //pow是d的n次幂,以循环变量i控制d乘以自身n次得到pow
int sum; //所有数位的n次幂的和,即pow的累加和
printf("请输入所求水仙花数的位数(3-7之间):\n");
scanf("%d",&n);
//根据输入的位数n,求出min:min=10的(n-1)次幂,1循环乘以n-1次10就可以得到
min=1;
for(i=1;i<n;i++)
{
min = min*10;
}
//根据min求出max:max=min*10-1
max=min*10-1;
//从min到max,遍历每个n位数
for(data=min;data<=max;data++)
{
//对temp取最低位d,计算其n次幂pow,累加到sum,去掉最低位的其他位赋给temp再次循环
sum = 0;
temp = data;
while(temp>0) //只要temp>0,就还有数位要处理
{
d = temp % 10;
//计算d的n次幂给pow
pow = 1;
for(i=1;i<=n;i++)
{
pow = pow * d;
}
//将本次循环所取到的数位d的n次幂pow累加到sum
sum = sum + pow;
//去掉最低位的数据参加下次循环,当temp是个位整数,temp/10=0 会结束循环
temp=temp / 10;
}
if(sum==data)//每位数n次幂的和sum等于data本身,则data是水仙花数
{
printf("%d\n",data);
}
}
system("pause");
}