1. 题目描述
题目:输入数字 n,按顺序打印出从 1 最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。
2. 思路分析
主要的坑点在:大数的溢出。当然,es6 提供了BigInt
数据类型,可以直接相加不用担心溢出。
除此之外,这题显然是要我们模拟“大数相加”:将最低位加 1,然后每次检查是否进位,如果不进位,直接退出循环;如果进位,需要保留进上来的 1,然后加到下一位,直到不进位或者超出了我们规定的范围。
3. 代码实现
js 中不方便操作字符串中指定位置的字符,因此用数组对象来模拟。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
function increase(arr) { let length = arr.length, over = 0
for (let i = length - 1; i >= 0; --i) { arr[i] = arr[i] + over
if (i === length - 1) { arr[i] += 1 }
if (arr[i] >= 10) { if (i === 0) { return true }
arr[i] = arr[i] - 10 over = 1 } else { break } }
return false }
function printMaxDigits(n) { if (n <= 0) { return }
let arr = new Array(n).fill(0) while (!increase(arr)) { console.log(arr) } }
printMaxDigits(2) printMaxDigits(3) printMaxDigits(10)
|