学习目标:任意范围的水仙花数计算
学习内容:
水仙花数的计算:
1.水仙花数是什么:“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身。
2.计算水仙花数的公式:对于一个n位数num
,设其各位数字为digit1, digit2, ..., digitn
,则水仙花数的计算公式为:
num = digit1^n + digit2^n + ... + digitn^n
学习产出:
使用的范围是0-100000
#include <stdio.h>
#include <math.h>
int main()
{
int start = 0; // 起始值
int end = 100000; // 终止值
for (int i = start; i <= end; i++) {
int temp = i;
int digits = 0;
int sum = 0;
// 计算位数
while (temp != 0) {
temp /= 10;
digits++;
}
temp = i;
// 计算各位数字的n次方之和
while (temp != 0) {
int digit = temp % 10;
sum += pow(digit, digits);
temp /= 10;
}
// 判断是否为水仙花数
if (i == sum) {
printf("%d ", i);
}
}
return 0;
}
分析代码:
start
:起始值,表示要计算的范围的起始数值。end
:终止值,表示要计算的范围的终止数值。temp
:临时变量,用于存储正在计算的数字。在计算过程中会对其进行操作,以便提取每一位数字。digits
:位数,表示当前正在计算的数字的位数。sum
:各位数字的n次方之和,用于存储计算结果。digit
:当前提取出来的数字,即当前正在计算的数字的最后一位数字。
该代码使用两个嵌套的循环来计算水仙花数。外层循环用于遍历指定范围内的所有数值,内层循环用于计算当前数值的每一位数字的n次方之和。
在内层循环中,首先通过对当前数值进行取余操作,提取出当前数值的最后一位数字。然后,将该数字的n次方加到sum
变量中。随后,通过除以10的操作,将当前数值向右移动一位,以便继续计算下一位数字。
最后,判断计算得到的sum
是否等于原始数值i
。如果相等,则说明该数值是水仙花数,将其输出。