2-9编程,请问老师水仙花数和自幂数的区别。

2-9编程,请问老师水仙花数和自幂数的区别。

以及在以后判断一个多位数的时候都要嵌套很多层循环来判断吗?有简便的方法没?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
卡布琦诺 2017-10-08 22:46:22

 1、验证一个数是否为水仙花数

    ①要写水仙花数的算法,我们首先来了解一下什么是水仙花数,水仙花数是指一个 3位正整数 ,它的每个位上的数字的 3次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153);

    ②了解了什么是水仙花数我们就开始分析该怎么下手。通过定义来看我们首先要把每一位数都取出来,然后通过验证等式是否成立来找出水仙花数;

    ③那么怎么去取到一个三位数的每一位呢,很简单,还是拿153来做例子吧,153%10取余为1将个位取出来,然后153%100取余,然后除以10取整,获得十位,153/100取整获得百位数;

    ④拿到了三位数怎么去判断呢,通过if判断语句来判断1^3 + 5^3+ 3^3 = 153是否成立,成立打印出来。我们先写一个判断水仙花数的代码:

<script>

while(true) {

var num = Number(prompt('请输入一个三位数'));

if(num < 1000 & num >= 100) {

var a = num % 10; //个位数 5             

var b = parseInt(num % 100 / 10); //十位数 6            

ar c = parseInt(num / 100); //百位数 7             

} else {

alert('输入错误;');

continue;

}

if(num == a * a * a + b * b * b + c * c * c) {

alert(num + "是水仙花数");

break;

} else {

alert(num + "不是是水仙花数");

break;

}

}

</script>

2、打印出所有的水仙花数   

    ①我们已经知道了怎么去判断一个数是否是水仙花数,那么怎么去打印所有的水仙花数呢,第一个想到的一定是循环。

    ②既然水仙花数是一个三位数,那么我们只要把所有的三位数判断一下就可以了,看代码:

<script>

document.write('水仙花数有:')

for(var num = 100; num < 1000; num++) {

var a = num % 10; //个位数

var b = parseInt(num % 100 / 10); //十位数

var c = parseInt(num / 100); //百位数

if(num == a * a * a + b * b * b + c * c * c) {

document.write(num + ',')

}

}

</script>

3、自幂数的算法,我们把水仙花数拓展一下,来做一做自幂数的算法;

    ①首先还是先了解一下什么是自幂数,自幂数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153);

    ②水仙花数只是自幂数的一部分,从水仙花数拓展,判断一个数是否是自幂数,首先要判断它是一个几位数

    ③然后取到数的每一位,来进行判断,以1634为例,具体的请看代码注释:

<script>

while(true) {

var num = Number(prompt('请输入一个大于100的数'));

if(num >= 100 && parseFloat(num) == parseInt(num)) {

var i = 100;

var count = 0,

sum = 0,

a;

/*判断num是几位数*/

while(true) {

if(num / i >= 1) {

i *= 10;

count++; //count = 1;时,为3位数,2时为四位数;   以1634为例:count=2

} else {

i /= 10; //进到这里时num<i,除以10跟num同位数;  以1634为例:i=1000

break;

}

}             /*取到每一位并计算每位数几次幂之和*/

while(i >= 1) {

var b = 1;

a = parseInt(num % (i * 10) / i); //取到num的每一位,  取千位为 1634/1000取整; 百位:1634%1000/100取整  十位:1634%100/10取整  个位1634%10;

                                      //百位和十位的规律都是   1634%(i*10)/i取整;同时对千位和个位进行试验,1634%10000=1634;1634%10/1;依旧成立

for(var j = 1; j <= count + 2; j++) {

b *= a; //根据位数,来决定每位数的几次幂

}

sum += b; //对每位数的几次幂进行求和;

i /= 10; //更新循环变量取下一位

}             /*判断是否为自幂数*/

if(num == sum) {

alert(num + "是自幂数");

break;

} else {

alert(num + "不是是自幂数");

break;

}

} else {

alert('输入错误;');

continue;

}

</script>

希望可以帮到你~!

  • 老师这个自幂数的算法看不懂啊,哭了ಥ_ಥ
    2017-10-19 17:36:52
  • 这个目前理解起来有一定的难度,所以你要努力学习哦~等你知识掌握的丰富了就可以理解啦~这个第三条“3、自幂数的算法,我们把水仙花数拓展一下,来做一做自幂数的算法;”是拓展的,你可以学完后面的再来的拓展这个哦~
    2017-10-19 17:55:58
  • 好的,谢谢老师~
    2017-10-20 16:49:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师