java 加法原理_js 大数加法

/**大数加法

实现原理,利用竖式加法原理

*/

function addStrings(num_str1, num_str2) {

//字符串转字符数组

const num_arr1 = num_str1.split('');

//字符串转字符数组

const num_arr2 = num_str2.split('');

// 竖式加法计算次数

let sum_length = Math.max(num_arr1.length, num_arr2.length);

//求和结果

const sum = [];

//进位标志位

let CF = 0;

// 循环语句为什么加CF进位存在判断呢,因为当最高位产生进位,(如 999 + 9999)

// 计算到千分位9的时候,并且没有更多数要参与运算时,任然需要进位参与一次运算,否则丢失进位。

while (sum_length-- > 0 || CF) {

// 求和,注意数组长度不够,按0算

let temp = Number.parseInt(num_arr1.pop() || 0)

+ Number.parseInt(num_arr2.pop() || 0) + CF;

if (temp >= 10) {

temp %= 10; // 取个位数

CF = 1; //产生进位(对于加法,最多产生1个进位)

} else {

CF = 0 // 未产生进位

}

sum.unshift(temp); // 记录求和数据(从头插入)

}

return sum.join('')

}

eg:

bc6609ae9526a27ef50695344b0bbce4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值