今日学习收获
今日写一个循环题遇到一个难题,虽然不难,但是找了半天才找到错误
题目如下:
输入两个数n,a,如果n==3, a == 2;
输出 2 + 22 + 222 的值。(不用输出式子)(****)
如: n == 4, a == 3;
输出 3 + 33 + 333 + 3333的值。
提示: 1、n = 3,相加三次,每次相加比前一次相加的数,多一位
2、每次多的这个位数的值为a, 3, 3*10+3(33), 33*10+3(333),...
思路:利用字符串拼接的方法输出,代码如下:
var str = ''; var n = prompt(); var a = prompt(); var num = 0; for (var i = 1; i <= n; i++) { num = a + num * 10; if (i == 1) { str = str + num; } else { str = str + '+' + num; } } document.write(num);
当输入 3 2 时,结果为 20+2200+222000,很明显是错误的,一开始没想明白,感觉代码没错,一直检查,找半天终于找到了答案,
原因是,通过弹窗输入的数据类型为String类型,因此所输入的a就是一个字符串,所以 num = a + num * 10;这一句代码就变成了
字符串拼接,当循环一次之后结果就变成了20,而正确结果应该为2,而第二次循环就变成了 2+20*10的字符串拼接,从而得到了2200,
以此类推。
解决办法,将输入的a转为Number类型,就能得到完美解决,代码如下:
num = Number(a) + num * 10;
最后输出:2+22+222
总结:一定得时刻注意,通过输入框prompt输入的数据为String类型,必要时得进行数据类型转换

浙公网安备 33010602011771号