"水仙花数"是指一个n位数,其各位数字的n次方之和恰好等于该数本身。
例:153=1^3+5^3+3^3 153是一个水仙花数
分析:首先要计算该数字有多少位,然后再计算该数字的每一位的n次方之和,最后是和与该数字本身进行判断两者是否相等。
一.如何计算该数字有多少位呢?
例:1是由1位数字组成,12是由2位数字组成,123是由3位数字组成,1234是由4位数字组成。
该数字与10相除即可剥离一位数字,与10相除的结果继续与10相除即可剥离每一位。
1:1/10==0(结束)
1由1位数字组成
12:12/10==1(把2剥离,只剩1)
1/10==0(结束)
12由2位数字组成
123:123/10==12(把3剥离,只剩2和1)
12/10==1(把2剥离,只剩1)
1/10==0(结束)
123由3位数字组成
1234:1234/10==123(把4剥离,只剩3,2和1)
123/10==12(把3剥离,只剩2和1)
12/10==1(把2剥离,只剩1)
1/10==0(结束)
二.如何计算该数字的每一位呢 ?
例:1是由1位数字组成,12是由2位数字组成,123是由3位数字组成,1234是由4位数字组成。
该数字连续模10和除以10即可得到每一位。
1:1%10==1(个位)
1/10==0(结束)
12:12%10==2(个位)
12/10==1
1%10==1(十位)
1/10==0(结束)
123:123%10==3(个位)
123/10==12
12%10==2(十位)
12/10==1
1%10==1(百位)
1/10==0(结束)
1234:1234%10==4(个位)
1234/10==123
123%10==3(十位)
123/10==12
12%10==2(百位)
12/10==1
1%10==1(个位)
1/10==0(结束)
#include <math.h>
#include <stdio.h>
int main() {
//打印"0-100000之间的自幂数(包括水仙花数)"
int i = 0;
for (i = 0;i < 100000;i++) {
//1.计算i一共有多少位-n
int n = 1;
int temp = i;
while (temp/10) {
n++;
temp = temp / 10;
}
//2.计算i的每一位的n次方之和
temp = i;
int sum = 0;
while (temp) {
sum+=pow(temp % 10,n);
temp = temp / 10;
}
//3.判断是否和自身相等
if (sum == i) {
printf("%d ",i);
}
}
return 0;
}