满分过
写的很水
凑合用用先
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
//自己写幂函数计算,使用pow会有一个点超时
int mi(int num, int n)
{
int i, sum = 1;
for (i = 1; i <= n; i++)
{
sum *= num;
}
return sum;
}
int main()
{
int i, n, min = 1, max = 1, j = 0, num;
int sum = 0;
scanf("%d", &n);
/*根据n找到所有的n位数*/
for (i = 0; i < n; i++)
{
max *= 10;
}
min = max / 10;
/*遍历所有的n位数*/
for (i = min; i < max; i++)
{
num = i;//将现在要判断的数赋值给num
while (1)//循环中判断水仙花数
{
sum +=mi((num % 10), n);
num /= 10;
// 从个位开始,每个位置上的数字的n次方和用sum保存
if (sum > i)
{
//之前用pow函数超时,想办法减少时间,结果没用
//这是判断如果前几位幂之和就超过了数字本身,那么后面的就不用判断,这一块不影响时间
sum = 0;
break;
}
if (num == 0)//当num=0时就说明每一位幂之和已经计算完成
{
if (sum == i)
printf("%d\n", sum);
sum = 0;
break;
}
}
}
return 0;
}