输入任意数位,求水仙花数?
输入任意数位,求水仙花数?
程序代码:
#include<stdio.h> #include <math.h> int getNarNum(int n); int main(void) { int n; int i; int count = 0; printf("输入水仙花位数:"); scanf("%d", &n); if (n < 3) { printf("输入错误!"); return 0; } for (i = 3; i <= n; i++) //如果只求当前位数的水仙花数,那么不用循环,直接调用就行。这里求的是3位到n位所有的水仙花个数 { count += getNarNum(i); } printf("%d位及以下水仙花有%d个\n",n,count); return 0; } int getNarNum(int n) { int i = 0; int count = 0; int num = 0; int sum = 0; int single = 0; for (i = (int)pow(10, n-1); i < (int)pow(10, n); i++) { single = i % 10; num = i/10; sum = 0; while(1) { sum += (int)pow(single, n); if (num == 0) { break; } single = num % 10; num /= 10; } if (sum == i) { count++; } } return count; }