4-1 水仙花数
水仙花数是指一个n位正整数(n>=3),他的每个位上的数字的n次幂之和等于他本身。
例如:
153 = 1^3 + 5^3 + 3^3
本题要求编写程序,计算所有n位水仙花数。
输入格式
输入在一行中给出的一个正整数n(3<=n<=7)
输出格式
按递增顺序输出所有n位水仙花数,每个数字占一行
输入样例
3
输出样例
153 370 371 407
代码
#include <stdio.h>
int main(){
int n; //n位整数
scanf("%d",&n);
int i,first; //first用于记录第一个符合位数的数
for(i=1;i<n;i++){ //计算第一个数
first*=10;
}
// printf("first=%d\n",first);
for(i=first;i<first*10;i++){ //遍历每一个符合位数的数字 i
int t,p,a;
int sum=0;
int d = 0;
for(p=i;p>0;p/=10){ //因为要对i进行拆解,所以要一个变量用来实现拆解i的同时保证i不变
t=p%10; //取末位数
d=t; //因为要对t进行幂运算处理,多以要引入变量用于存储t的初始值
for(a=1;a<n;a++){ //取t的n次方
t*=d;
}
sum+=t; //得到每位数字的n次方
//printf("%d\n",sum);
}
if(i==sum){ //判断条件
printf("%d\n",i);
}
}
return 0;
}
思路
-
接收一个n,用来得到n位数
-
使用n进行幂运算得到第一个需要判断的数字
first
-
使用一个循环遍历每一个符合位数的数字
-
使用一个循环对每个数字进行拆解
-
使用循环,在4的循环中将每个拆开的数字进行幂运算取n次方,求和
sum
-
判断,是否符合条件