今天老师提出了可以用循环来分割一个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;