目录
实现语言:C
编译器:gcc
题目链接:
题目:
2022-高级语言程序设计练习——循环结构程序设计
7-20 水仙花数
分数 20
作者 徐镜春
单位 浙江大学
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
代码长度限制16 KB
时间限制2500 ms
内存限制64 MB
AC代码:
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d", &n);
int min = 1, max = 1;
for (int i = 1; i <= n; i++)
{
min = min * 10;
max = max * 10;
}
min = min / 10;
max = max - 1;
// 不要用pow()函数,那样会超时,能不用库函数就不用
int number; // 每次取出来的末位值
int sum = 0;
int init = 0; // i是外层循环变量,在while中不变,用init代替i在while中循环
for (int i = min; i <= max; i++)
{
init = i;
sum = 0; // 每一个i单独判断,所以sum每判断一个i之后要清零
while (init != 0)
{
number = init % 10;
for (int j = 1; j <= n - 1; j++) // 不要用pow()函数,number的n次幂就是在number上乘以n-1个number
{
number = number * (init % 10); // 这里不要写成number = number * number;那样是求number的1, 2, 4, 8...次幂
}
sum = sum + number;
init = init / 10;
}
if (sum == i)
{
printf("%d\n", sum);
}
}
}
提交正确截图: