阿姆斯特朗数

本来周五在公司,也没啥事情干,在群里看见别人发的一个题目,身为一个前端菜鸡就写了一下,不喜勿喷....

 

实现输入一个数,当在一个可变范围内时,会返回输入数字最近的一个阿姆斯特朗数,并且可以输出范围内所有的阿姆斯特朗数。 

 

题目如上,直接上代码...

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>阿姆斯特朗数</title>
</head>

<body>
    <div id="main">
        输入正整数:<input type="text" id="enter" value="" onchange="init._init_interpolation(this.value)"/><br>
        数值范围start:<input type="text" id="start" value="1" onchange="init._init_range(this.value)"/><br>
        数值范围end:<input type="text" id="end" value="1000" onchange="init._init_range(this.value)"/><br>
        最近数:<input type="text" id="recent" value="" readonly/><br>
        查看阿姆斯特朗数:<button onclick="init._init_alert()">点击查看</button>
    </div>
</body>
</html>
<script>
    let global_params = {
        _data: [],
        _arrs: [],
        _reg: /^[1-9]\d*$/,
        _state: false
    }
    console.log(global_params._reg.test(1.2))
    var init = {
        _init_interpolation: function(s){
            init_Auxiliary_Method._test(s);
            let _s = parseInt(s);
            if(global_params._state)global_params._data = global_params._arrs;
            global_params._state = true;
            global_params._arrs = global_params._data.concat();
            global_params._data.push(_s);
            global_params._data.sort(init_Auxiliary_Method._sortNumber);
            let index = global_params._data.indexOf(_s);
            let recent;
            if(index == 0){
            recent = global_params._data[index+1];
            }else{
            if(global_params._data[index]-global_params._data[index-1]<global_params._data[index+1]-global_params._data[index]){
              recent = global_params._data[index-1];
            }else{
              recent = global_params._data[index+1];
            }
            }
            document.getElementById("recent").value = recent;
        },
        _init_crossin: function(n){
            let a = n + "";
            let arr = a.split("");
            let data =[];
            init_Auxiliary_Method._add(data,arr);
            for (let i = 0; i < 10; i++) {
                var sum1 = data.reduce(init_Auxiliary_Method._getSum, 0)
            };
            if(n == sum1)global_params._data.push(sum1)
        },
        _init_range: function(state){
            init_Auxiliary_Method._test(state);
            let stare = document.getElementById("start").value;
            let end = document.getElementById("end").value;
            for(let j=stare;j<end;j++){
                if(stare<end)init._init_crossin(j);
            }
        },
        _init_alert: function(){
            if(global_params._arrs !== [])alert(global_params._arrs);
        }
    }

    var init_Auxiliary_Method = {                                                   //辅助方法
        _add: function(data,arr){                                            //数字拆分
            for(let i=0;i<arr.length;i++){
                data.push(Math.pow(parseInt(arr[i]),3))
            }
        },
        _getSum: function(preValue,curValue,index,array){
            return preValue += curValue;
        },
        _sortNumber: function(a,b){                                     //排序
            return a - b;
        },
        _test: function(state){
            if(!global_params._reg.test(parseFloat(state))){
                alert("请输入正整数!");
                return false;
            }
        }
    }
    window.onload = function(){
        init._init_range(1);
    }
</script>
	

  

现在输入一个正整数,选择一个范围,会返回所有的阿姆斯特朗数,并且返回最近的阿姆斯特朗数。

 

有什么不对的希望大家指正....

 

posted @ 2017-08-05 23:26  小菜菜爱吃菜  阅读(565)  评论(0编辑  收藏  举报