js超大数字加法运算

5 篇文章 0 订阅

 


	function splitNum(num, segment = 8) {
		num = num.toLocaleString();
		let res = [];
		while (num.length >= segment) {
			res.push(num.slice(-segment))
			num = num.slice(0, num.length - segment)

		}
		if (num !== '') res.push(num)
		return res;
	}

	function sum(num1, num2) {
		num1 = num1.toString();
		num2 = num2.toString();
		if (num1.length < num2.length) {
			let num = num1;
			num1 = num2;
			num2 = num;
		}

		let numArr1 = splitNum(num1);
		let numArr2 = splitNum(num2);
		let offset = 0;
		let res = [];

		numArr1.forEach((n1, i1) => {
			n1 = Number(n1);
			let n2 = numArr2[i1] === undefined ? 0 : Number(numArr2[i1]);
			let stride = 0;
			let str = (n1 + n2 + Number(offset)).toString();

			if (str.length > n1.toString().length) {
				stride = str.length - n1.toString().length;
				offset = str.slice(0, stride);
				str = str.slice(stride, str.length);
			} else {
				offset = 0;
			}

			res.push(str);
		})

		return res.reverse().join('');
	}

	a = [
		'1111111111',
		'2222222222',
		'6666666666',
		'7777777777'
	].join('');

	b = [
		'11111111',
		'9222222222',
		'6666666666'
	].join('');
	

	let c = sum(a, b);
	console.log(c)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值