刚接触Matlab编程,或者被老师布置了“找出所有水仙花数”的作业?别头疼,这玩意儿听起来玄乎,其实就是个经典的入门练习题。用Matlab来解决它,比你想象中简单得多。
水仙花数到底是什么?
水仙花数,也叫阿姆斯特朗数,定义很简单:一个n位数,其各位数字的n次方之和等于它本身。最典型的就是三位数里的153。不信你算算:1³ + 5³ + 3³ = 1 + 125 + 27,正好等于153。是不是有点像数字在“自恋”?所以叫水仙花数。我们今天的目标,就是把100到999之间,所有符合这个条件的三位数都给揪出来。
手把手:用Matlab编写寻找程序
别被“编程”吓到,思路其实就三步:拆数字、算立方和、判断是否相等。下面这个代码块,你复制到Matlab的命令窗口或者新建一个脚本文件运行,结果立马就出来了。
- 核心代码:
for num = 100:999
hundreds = floor(num / 100); % 提取百位
tens = floor(mod(num, 100) / 10); % 提取十位
units = mod(num, 10); % 提取个位
if (hundreds^3 + tens^3 + units^3) == num
disp(num); % 输出水仙花数
end
end - 代码解读:
1.for循环遍历100到999每一个数。
2. 用floor(向下取整)和mod(取余)操作把百位、十位、个位数字分离出来。这步是关键,很多新手会卡在这儿。
3. 计算三个数字的立方和,并和原数num比较。
4. 如果相等,就用disp函数把它显示在屏幕上。 - 运行结果:运行这段代码,你的Matlab命令窗口会干净利落地输出四个数:153, 370, 371, 407。没错,三位数的水仙花数就这4个,没别的了。
搞定之后,你可以试试挑战一下四位数(比如1634)的水仙花数,只需要把循环范围和次方数改一下就行。关于Matlab基础语法的更多细节,可以参考我们的[内链:Matlab入门教程]。
常见问题(FAQ)
- 问题:除了153、370、371、407,还有别的三位水仙花数吗?答案:没有了。在100到999的范围内,严格符合定义的三位水仙花数就这四个。你可以自己手动验证一下,或者把上面程序的循环终点改成9999,看看四位数的结果。
- 问题:我运行了代码,但什么也没输出,是哪里错了?答案:最常见的原因是代码输入有误,比如括号用了中文符号,或者
==写成了=。Matlab对语法很严格,建议直接复制上面的代码块。另一个可能是你意外清空了工作区,但代码本身没问题。 - 问题:这个程序能用来找其他位数的水仙花数吗?答案:完全可以。你只需要修改两处:一是
for循环的起止范围(比如找四位数就是1000:9999),二是把次方^3改成对应的位数^4。不过位数越高,计算量会越大。 - 问题:水仙花数在实际编程中有什么用?答案:说实话,它本身没有直接的工程应用。但它是一个绝佳的“教学工具”,能帮你巩固循环、条件判断、数值运算和分解数字这些最基础的编程概念。很多公司面试考基础算法,也会从这类题目变形而来。
好了,总结一下:
1. 水仙花数的定义就是“各位数字的立方和等于自身”。
2. 用Matlab的循环和取余运算能轻松拆解数字并判断。
3. 三位数的答案只有4个:153, 370, 371, 407。
代码已经给你了,复制粘贴运行一下,亲眼看看结果吧。理解了思路,下次遇到类似的数字分解问题,你肯定能举一反三。








