最近阅读《啊哈C语言!》,入门 C 语言。这本书是面向小学生的,读起来没有门槛,学习曲线平缓的像是湖面。
里面有个计算水仙花数的小程序,比较有趣。

水仙花数(Narcissistic Number)是一种特殊的三位整数,其中百分位、十分位和个位的数字立方和,等于它自身。所以水仙花数又被称作“自恋数”。
153 就是一个水仙花数,它让如下等式成立:

用 C 语言查找所有的水仙花数,代码可以这么写:
#include <stdio.h>
int cube(n) {
return n * n * n;
}
int cube_sum(a, b, c) {
return cube(a) + cube(b) + cube(c);
}
int digit(a, b, c) {
return a * 100 + b * 10 + c;
}
int main() {
int a, b, c;
for (a = 1; a <= 9; a++) {
for (b = 0; b <= 9; b++) {
for (c = 0; c <= 9; c++) {
if (cube_sum(a, b, c) == digit(a, b, c)) {
printf("%d%d%d ", a, b, c);
}
}
}
}
printf("
");
return 0;
}
在 macOS 或 Linux 系统,如果安装了 C 编译器,可以执行如下命令编译代码(假设 C 源文件名是 narcissistic.c):
make narcissistic
C 语言在运行这些纯数学计算时,真是挺合适的。编译速度快,生成的可执行文件也很小,只有 48K。

水仙花数小程序
END
© 版权声明
文章版权归作者所有,未经允许请勿转载。


有没有大于三位数的水仙花数?如果有怎么编程?位数更多呢?
一样的,难点在于把每位数分离出来