循环分割一个n位数的新思路及问题

今天老师提出了可以用循环来分割一个n位数,思路如下

假设要分割的数是1234    

第一次  个位=1234%10=4
                       parseInt(1234/10)=123
              
第二次   十位=123%10=3
               parseInt(123/10)=12
    
第三次    百位=12%10=2
               parseInt(num/10)=1
    
第四次      千位=1%10=1
               parseInt(num/10)=0

这样的可以实现n位数的循环分割,但是,有一个问题,这个是先分割出来的永远是个位,所以这个while出来的数字都是倒序的。

如上文,你输入1234,输出的4,3,2,1

本来,我是希望用for循环,每取一个数,然后倒着插入数组,但是for循环需要确定循环次数,也就是这个数组的长度。不知道为什么,获取出来的长度永远是18位。

 sVal=parseInt(window.prompt("请输入一个n位数"));
    var a=0,b=0,k=0;
    var arr=new Array();
    k=toString(sVal).length;//这里错误,位数一直为18
    for(var i=k-13;i>=1;i--){
        b=sVal%10;
        sVal=Math.floor(sVal/10);
        arr[i]=b;
    }
    // arr.push(a);
    document.getElementById("Result").innerText=arr;

由于循环次数不对,这个数组的位数就不对了,数组中会出现很多0

老师则用了while循环但是,while循环确实适用于未知次数的循环,但是我们如何在while循环中方向插入数组呢,没有办法,我的办法也就是再加一个数组,用for循环,反向插入新数组,暂时只能这样了,留待以后水平高了再修改吧

function spliceNum(num){
        var count = 0;
        var arr=new Array();
       // var arr2=new Array();
        while(num>0){
            var temp = num%10;
            num = parseInt(num/10);
            count++;
            arr[count-1]=temp;
        }
        //2018-7-28     更新,直接颠倒数组,无须用新数组
       // for(var i=arr.length-1;i>=0;i--){
         //   arr2.push(arr[i]);
        //}
        return arr.reverse();
}

思路2:用死循环获得数字长度

    var length = 0, temp =0; 
    var arr=new Array();
    var num2=num;
    for(;;){
        num2= parseInt(num2/10);
        length++;
        if (num2==0){
            break;
        }
    }
    // console.log(length);
    for(var i=length-1;i>=0;i--){
        temp=num%10;
        num=Math.floor(num/10);
        arr[i]=temp;
    }
    return arr;

猜你喜欢

转载自blog.csdn.net/qq_42632299/article/details/81227928