????????水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
????????假如我们尝试用c语言求解1~10000之间有多少自秘数,我们首先要创建1~10000之间的变量,计算每一个变量的位数,判断每一个变量的每一位的(位数次方)相加的值是否与该变量相等,如果相等就是自秘数。
#include<stdio.h> #include<math.h> int main() { ?? ?int i = 0; ?? ?for (i = 0;i <= 100000;i++) ?? ??? ?//创建1~10000的变量 ?? ?{ ?? ??? ?int n = 1; ?? ??? ?int tmp = i; ?? ??? ?int sum = 0; ?? ??? ?//分别计算变量1~10000之间的位数 ?? ??? ?while (tmp /= 10) ?? ??? ?{ ?? ??? ??? ?n++; ?? ??? ?} ?? ??? ?tmp = i; ?? ??? ?//计算每一个变量每一位的(位数)次方,相加 ?? ??? ?while (tmp) ?? ??? ?{ ?? ??? ??? ?sum += pow(tmp % 10, n);//pow函数,计算一个数n次方。 ?? ??? ??? ?tmp /= 10; ?? ??? ?} ?? ??? ?//判断当前数的每一位的(位数)次方相加是否等于当前值,如果相等当前值就是自秘数。 ?? ??? ?if (i == sum) ?? ??? ??? ?printf("%d\t", sum); ?? ?}?? ? ?? ?return 0; }

?
|