题解 | #高精度整数加法#
高精度整数加法
http://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
穷举法
将两个数字切割成数组然后反转相加
先获取他们的最长的数组的长度,然后循环这个长度
let line;
let index = 0;
let arr = []
const getNum = (num1,num2)=>{
let arr1 = num1.split('').reverse()
let arr2 = num2.split('').reverse()
let str = ''
let newArr = [];
let length = arr1.length > arr2.length ? arr1.length : arr2.length
for(let i = 0;i<length;i++){
let carry = 0;
//分三种情况,要么长度一样,要么arr1长,要么arr2长
if(arr1[i] && arr2[i]){
//存在并且相加是否大于10 比如个位相加
if(Number(arr1[i]) + Number(arr2[i]) >= 10){
carry = 1
}
// 大于10的如果arr1长给arr1的十位加一 否则给arr2的十位加1
if(arr1.length > arr2.length ){
arr1[i + 1] = (Number(arr1[i + 1]) + carry).toString()
}else{
arr2[i + 1] = (Number(arr2[i + 1]) + carry).toString()
}
//字符串只添加想家取余的数 比如7+9 取6
str+= (Number(arr1[i]) + Number(arr2[i])) % 10
//这个是判断两个数组一样长比如789,456,
//7+4已经取了余数1 但是7+4 = 11,所以在第一位补一个1
if(i == length - 1 && carry){
str+='1'
}
carry = 0
}else if(arr1[i]){
//表示arr1长度长。比如7897788,923
//比如 99999,9999始算 9+9=18 第一步进1 由于千位是9 ,9+1为10,所以这时候千位为10,但是已经大于10了所以取0,将这个1进位给下一个
//然后遇到9又是10, 当到万位的时候,这个时候是10,已经循环到最后一步了,所以直接取0就好了 前一步的余数就是相加的结果了
if(Number(arr1[i]) >= 10){
carry = 1
arr1[i + 1] = (Number(arr1[i + 1]) + carry).toString()
str+= ((Number(arr1[i])) % 10).toString();
//已经取0了但是不要忘记 首位+1
if(i == length - 1 && carry){
str+='1'
}
}else{
str+= Number(arr1[i]).toString()
}
}else{
//同理arr1
if(Number(arr2[i]) >= 10){
carry = 1
arr2[i + 1] = (Number(arr2[i + 1]) + carry).toString()
str+= ((Number(arr2[i])) % 10).toString();
if(i == length - 1 && carry){
str+='1'
}
}else{
str+= Number(arr2[i]).toString()
}
}
}
return str.split('').reverse().join('')
}
while(line = readline()){
index++;
arr.push(line)
if(index == 2){
let number = getNum(arr[0],arr[1]);
console.log(number)
index=0;
arr = []
}
}