/**
* NOTE: 如何实现两个非常大的数字(已经超出了Number范围)的加法运算。
* 注意由于这两个已经超过了Number范围,因此不能用Number存,这里我们选择使用字符串存储。
*/
/**
* NOTE: 思路: 我们只要将两个数字前面补0至相同的长度,
然后从低位到高位进行相加, 同时用一个变量记录进位的信息即可。
*/
/**
* 大的数字相加
* @param {number string} a
* @param {number string} b
*/
function bigNumberSum(a, b) {
const m = a.length
if (a.length < b.length) {
m = b.length
}
for (let i = 0; i < m; i++) {
if (!a[i]) {
a = `0${a}`
continue
}
if (!b[i]) {
b = `0${b}`
continue
}
}
return sumFn(a, b).join("")
}
function sumFn(a, b) {
const res = []
let flag = 0
// 这里需要从低位到高位
for (let i = b.length - 1; i > -1; i--) {
const sum = flag + +a[i] + +b[i]
// 进 1
if (sum > 9) {
flag = 1
} else {
flag = 0
}
// 保持 10 进制的
res[i] = sum % 10
}
// 这里是最高位进 1
if (flag === 1) {
res.unshift(1);
}
return res
}
const res = bigNumberSum("48204203489204", "808089234802")
console.log(res)
两个大数相加
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...