水仙花数 C 语言程序代码
水仙花数是指一个三位数,其各位数字的立方和等于该数本身,下面用C语言实现:遍历100到999,拆分出百位、十位、个位,计算立方和并与原数比较,相等则输出,结果为153、370、371、407,核心代码为:`#include int main(){int i,a,b,c;for(i=100;i
《C语言实现水仙花数的判断与求解(附完整代码)》
水仙花数(Narcissistic number)又称自恋数、阿姆斯特朗数,是指一个 n 位正整数,其各位数字的 n 次方之和等于该数本身,153 是一个三位数,1³ + 5³ + 3³ = 153,153 是水仙花数。
三位水仙花数共有 4 个:153、370、371、407,下面介绍如何用 C 语言程序判断一个数是否为水仙花数,并输出所有三位水仙花数。
判断一个数是否为水仙花数
程序设计思路:
- 计算该整数的位数 n;
- 依次取出每一位数字;
- 计算每一位数字的 n 次幂并累加;
- 判断累加和是否等于原数。
完整代码如下:
// 计算 base 的 exp 次幂
int power(int base, int exp) {
int res = 1;
for (int i = 0; i < exp; i++) {
res *= base;
}
return res;
}
// 判断是否为水仙花数
int isNarcissistic(int num) {
int temp = num;
int n = 0;
int sum = 0;
// 计算位数
while (temp != 0) {
temp /= 10;
n++;
}
temp = num;
// 计算各位数字的 n 次幂之和
while (temp != 0) {
int digit = temp % 10;
sum += power(digit, n);
temp /= 10;
}
return sum == num;
}
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (isNarcissistic(num)) {
printf("%d 是水仙花数\n", num);
} else {
printf("%d 不是水仙花数\n", num);
}
return 0;
}
输出所有三位水仙花数
要输出 100 到 999 之间的所有水仙花数,可以直接遍历这个范围,判断每个数是否满足条件,由于三位数的位数固定为 3,因此每一位数字的 3 次幂之和等于原数即可。
代码如下:
// 计算 base 的 exp 次幂
int power(int base, int exp) {
int res = 1;
for (int i = 0; i < exp; i++) {
res *= base;
}
return res;
}
int main() {
printf("三位水仙花数有:");
for (int num = 100; num <= 999; num++) {
int sum = 0;
int temp = num;
while (temp != 0) {
int digit = temp % 10;
sum += power(digit, 3);
temp /= 10;
}
if (sum == num) {
printf("%d ", num);
}
}
printf("\n");
return 0;
}
运行结果为:
三位水仙花数有:153 370 371 407
C 语言实现水仙花数的关键在于:
- 位数的计算;
- 数字的逐位拆分;
- 幂运算的累加判断。
使用自定义的整数幂函数可以避免浮点数误差,掌握了基本思路后,还可以尝试扩展到任意位数的水仙花数求解。
文章版权声明:除非注明,否则均为安好网原创文章,转载或复制请以超链接形式并注明出处。
