水仙花数的搜索和判定问题
一、 课题内容和要求
题目 A4:
水仙花数的搜索和判定问题 水仙花数(Narcissistic number)又被称为阿姆斯特朗数(Armstrong number)。 水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身(例 如:1^3 + 5^3+ 3^3 = 153)。使用 for 循环语言来控制 100-999 个数,将每个数分 解出个位/十位/百位。,并对执行时间进行测试。
二、需求分析
使用 for 循环和 if 语句来判断三位数是否满足需求,
i = n / 100; 分解出百位 j = n / 10 % 10; 分解出十位 k = n % 10; 分解出个位 |
---|
if ( n== i * i * i + j * j * j + k * k * k ) |
将每个数分解出个位/十位/百位,并对执行时间进行测试。
三、概要设计
首先输入int n=100、定义int i,j,k,再利用for循环来判断三位数是否满足要求,最后输出满足水仙花数的三位数。
该程序主要调用的就是
for (n = 100; n < 1000; n++)
以达到循环的效果。
四、详细设计
#include <stdio.h>
#include <stdlib.h>
// 求出水仙花数
int main()
{ // 水仙花数是一个3位数
// 水仙花数是个位、十位、百位的数字立方和等于原数
int i, j, k, n;
printf(" 100-1000之间满足要求的水仙花数是: \n");
// 判断三位数是否满足要求
for (n = 100; n < 1000; n++)
{
i = n / 100;/*分解出百位*/
j = n / 10 % 10;/*分解出十位*/
k = n % 10;/*分解出个位*/
if (n == i * i * i + j * j * j + k * k * k)
{
printf(" %d\n", n);
}
}
printf("\n");
return 0;
}
五、测试数据及其结果分析
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
(例如:1^3 + 5^3+ 3^3 = 153)。
三位的水仙花数共有4个:153,370,371,407;
六、调试过程中的问题
问题:未使用换行,导致数据堆积不易观察
printf(" 100-1000之间满足要求的水仙花数是: “); printf(” %d", n);
解决办法:利用转义字符 \n 达到换行的效果。
printf(" 100-1000之间满足要求的水仙花数是: \n"); printf(" %d\n", n);