一、题目:
例:水仙花数 153=1 * 1 * 1+5 * 5 * 5+3 * 3 * 3
1.输入一个数,判断是不是水仙花数
每位数字的立方和等于等于该数即水仙花数,如果是水仙花数,则输出“是”,否则输出“否
2.找出100–999里面有多少个水仙花数,分别输出这些水仙花数?
二、解题思想:
1.水仙花数:一般来说水仙花数就是一个三位数中,百位的数字的三次方加上十位的数字的三次方,再加上个位数字的三次方,等于这个三位数。
2.三位数中的水仙花数有:153、370、371、407
3.此题的重点在于如何得到每个位置上的数字,思想就是通过除或者取余的方式:假设这个数字是153,我要的到百位上的数字,只需要用153/100即可;要得到十位上的数字,首先得让153%100,得到余数之后,再让余数 /10;得到各位数,只需要将153%100%10即可
4.% 在js、java等变成语言中,是取余的意思
5.100–999是一个范围,一般遇到范围的情况,都会优先考虑用循环来遍历,以解决问题
6.js中,计算一个数的几次方,可以用内置函数:Math.pow(底数,幂)
三、代码实现:
1.判断是否是水仙花数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水仙花数</title>
</head>
<body>
<script>
var num = parseInt(prompt('请输入一个数:'));
var a,b,c;
a = parseInt(num/100);
b = parseInt(num%100/10);
c = parseInt(num%100%10);
// var sum = a*a*a+b*b*b+c*c*c;//这句可以等价于下一句
var sum = Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3);
if (sum===num){
alert(num+"是水仙花!");
}else {
alert(num+"不是水仙花!");
}
</script>
</body>
</html>
2.找出100–999里面有多少个水仙花数,分别输出这些水仙花数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水仙花</title>
</head>
<body>
<script>
/*找出100--999里面有多少个水仙花数,分别输出这些水仙花数?
* 153=1*1*1+5*5*5+3*3*3
* 百位:i/100
* 十位:i%100/10
* 个位:i%100%10
* */
var count = 0;//计数
for (var i = 100;i <= 999;i++){
// console.log(i);
var bw = parseInt(i/100);
var sw = parseInt(i%100/10);
var gw = parseInt(i%100%10);
//var sum = bw * bw *bw + sw *sw *sw + gw* gw *gw;//这一句等价于下一句
var sum = Math.pow(bw,3)+Math.pow(sw,3)+Math.pow(gw,3);
// console.log(sum);
if (i === sum){
count++;
console.log('水仙花数:'+i);
}
}
console.log('共计:' + count+'个');
</script>
</body>
</html>