题目描述
水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。
例如:
153 = 1^3 + 5^3+ 3^3.
1634 = 1^4 + 6^4 + 3^4 + 4^4.
本题要求编写程序,计算所有N位水仙花数。
解答要求时间限制:2000ms, 内存限制:64MB
输入
输入的测试数据只有一行, 一个数字 N(输入数据保证 N >= 3 并且 N < 8)表示要求输出的水仙花数的位数.
输出
每组测试数据输出包括很多行。首先按照从小到大的顺序输出满足要求的数, 每个数一行;最后输出一个整数, 代表满足要求的数的个数.
样例
输入样例 1 复制
3
输出样例 1
153 370 371 407 4
提示
暴力可过, 枚举长度为 n 位的所有正整数找出满足要求的点
#include<stdio.h>
#include<string.h>
int data_max[7] = { 0,99,999,9999,99999,999999,9999999};
int data_min[7] = { 0,10,100,1000,10000,100000,1000000 };
int g_num = 0;
int main() {
int N = 0;
int temp = 0;
int jizhun = 10;
int i, j = 0;
int m = 0;
int max ,min= 0;
int a[7] = { 0 };
int sum[7] = { 1 };
int sum_all = 0;
scanf("%d",&N);
max = data_max[N - 1];
min = data_min[N - 1];
//printf("max is %d,min is %d\r\n", max, min);
for (i = min; i < max; i++) {
temp = i;
for (j = 0; j < N; j++) {
a[j] = temp % 10; //取余
temp = temp / 10; //取商
}
for (; j >= 0; j--) {
if (a[j] != 0) {
for (m = 0; m < N; m++) {
sum[j] = sum[j] * a[j];
}
sum_all += sum[j];
sum[j] = 1;
}
}
if (i == sum_all) {
printf("%d\r\n", i);
g_num++;
}
sum_all = 0;
}
printf("%d\r\n", g_num);
}