js算法之判断水仙花数

196 阅读2分钟

任务

水仙花数是这样的一个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)) ;

心得

在做一些算法编程题时,需要有逻辑的梳理好整个编程思路,编写代码时从外到里,从上到下一步一步的完成。尽可能使用不同的方法去解决问题,利于发散思维,构建整体系统的知识。能够自己想出逻辑流程图,对编写程序非常有帮助,需要逐步培养养成的。