任务
水仙花数是这样的一个3位数:它的每一个数位的数字的立方和等于它本身。
例如:153=1 * 1 * 1 + 5 * 5 * 5+ 3 * 3 * 3 ,故153是水仙花数。
当用户输入一个三位数n,判断这个数字n是不是水仙花数。
思路
当用户输入一个3位数后,需要将这个数字进行拆位,那么如何进行拆位呢?
1、数学方法
百位:n/100在取整;
十位:n/10在取整,然后将得到的数字在对10取余;
个位:n%10;
这里的取整可以使用Math.floor()向下取整(正数)或者使用parseInt()方法直接取整。
2、字符串方法
首先将输入的数字转为字符串,再输入使用charAt()方法,得到每个数位的值。
代码
1、数学方法
<script>
// 要求用户输入一个三位数
var n = Number(prompt('请输入一个三位数'));
// 对用户输入的数值,进行合法性的验证
if (!isNaN(n) && n >= 100 && n <= 999) {
// 当用户输入的数字合法
// 数学方法拆位
// 百位
var a = Math.floor(n / 100);
// var a = parseInt(n / 100);
// 十位
var b = Math.floor(n / 10) % 10;
// var a = parseInt(n / 10) % 10;
// 个位
var c = n % 10;
// 判断
if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) {
alert(n + '是水仙花数');
} else {
alert(n + '不是水仙花数');
}
} else {
// 当用户输入的数字不合法
alert('输入的数字不合法,请重新输入');
}
</script>
2、字符串方法
// 字符串方法拆位
// 把数字n变为字符串,再去使用字符串的方法charAt():得到指定位置的字符,需要再将其转为数字去参与运算
var n_str = n.toString();
// 百位
var a = Number(n_str.charAt(0)) ;
// 十位
var b = Number(n_str.charAt(1)) ;
// 个位
var c = Number(n_str.charAt(2)) ;
心得
在做一些算法编程题时,需要有逻辑的梳理好整个编程思路,编写代码时从外到里,从上到下一步一步的完成。尽可能使用不同的方法去解决问题,利于发散思维,构建整体系统的知识。能够自己想出逻辑流程图,对编写程序非常有帮助,需要逐步培养养成的。