首页 > 试题广场 >

高精度整数加法

[编程题]高精度整数加法
  • 热度指数:130150 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个用字符串 str 表示的整数,求它们所表示的数之和。

数据范围:

输入描述:

输入两个字符串。保证字符串只含有'0'~'9'字符



输出描述:

输出求和后的结果

示例1

输入

9876543210
1234567890

输出

11111111100
    let a =await readline();
    let b = await readline();
    let len = Math.max(a.length,b.length);
    a = a.padStart(len,0);
    b = b.padStart(len,0);
    let ans = '',s=0,sum=0
    for(let i=len-1;i>=0;i--){
        // 个位
        sum = ((parseInt(a[i])+parseInt(+b[i])+s)%10).toString();
        // 进位
        s = parseInt((parseInt(a[i])+parseInt(+b[i])+s)/10);
        ans = sum.toString()+ans
    }
    if(s) ans = s.toString()+ans;
    console.log(ans)

发表于 2023-09-11 23:28:48 回复(1)

BigInt居然不能识别,可惜了~

const a = BigInt(readline());
const b = BigInt(readline());
console.log(a + b + '');
发表于 2021-12-20 23:17:10 回复(0)
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let list = [];
rl.on('line', function (line) {
    list.push(line);
    if(list.length==2){
        let a = list[0];
        let b = list[1];
        //可以用进位式大数加法,也可以用BigInt
        console.log((BigInt(a)+BigInt(b))+'');
        list = [];
    }
});

发表于 2021-11-22 22:40:30 回复(0)
注意去空格
发表于 2021-03-21 23:16:14 回复(0)
const readline = require('readline')

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})

const inputArr = []
rl.on('line', function(input) {
  inputArr.push(input)
})

// 大数求和
function bigNumerSum(numA, numB) {
  // 不做这个过不了所有测试用例  
  numA = numA.trim()
  numB = numB.trim()
  // 找出更长的长度  
  let maxLen = numA.length > numB.length ? numA.length : numB.length
  // 两个数达到相同位数 前面补0
  numA = numA.padStart(maxLen, '0')
  numB = numB.padStart(maxLen, '0')
  let carry = 0 // 进位
  let sum = '' // 和
  for(let i=maxLen-1; i>=0; i--) { // 从最后一位开始
    let s = Number(numA[i]) + Number(numB[i])
    s += carry
    carry = s < 10 ? 0 : 1
    sum = (s%10)+sum
  }
  return carry === 0 ? sum : '1'+sum
}

rl.on('close', function() {
  const res = []
  
  for(let i=0; i<inputArr.length;) {
    let numA = inputArr[i], numB = inputArr[i+1]
    let sum = bigNumerSum(numA, numB)
    res.push(sum)
    i+=2
  }
  
  res.forEach(s => console.log(s))
  process.exit(0)
})

发表于 2021-01-21 19:58:15 回复(0)
function func (num1, num2) {
    let len1 = num1.length
    let len2 = num2.length
    let min = ""
    let max = ""
    if (num1.length >= num2.length) {
        max = num1
        min = num2
    } else {
        max = num2
        min = num1
    }
    let flag = false
    let res = ""
    let dig1 = ""
    let dig2 = ""
    for (let i = 1; i <= min.length; i++) {
        dig1 = num1.substr(len1 - i, 1)
        dig2 = num2.substr(len2 - i, 1)
        let tmp = parseInt(dig1) + parseInt(dig2)
//         console.log(dig1, dig2)
        if (flag) {
            tmp += 1
        }
        if (tmp >= 10) {
            flag = true
            tmp = String(tmp).substr(1)
        } else {
            flag = false
            tmp = String(tmp)
        }
//         console.log(tmp)
        res = `${tmp}${res}`
    }
    if (max.length !== min.length) {
        let pre = parseInt(max.substr(0, max.length - min.length))
        if (flag) {
            pre += 1
        }
        return `${String(pre)}${res}`
    } else {
        if (flag) {
            return `1${res}`
        } else {
            return res
        }
    }
}
js的大佬帮忙看看。。用例输入: 630222, 6450。这个函数在浏览器和node环境中都可以正确输出636672。但是为什么这段代码在牛客里输出结果是:630867NaN。最后一位是NaN然后前面位相加也错了位,实在想不明白为什么。求解
发表于 2020-12-10 20:17:14 回复(0)
var readline=require("readline");
var r1=readline.createInterface({
    input:process.stdin,
    output:process.stdout
});
var data=[];
r1.on('line',function(line){
    line=line.trim();
    data.push(line);
    if(data.length===2){
        var tmp=Math.max(data[0].length,data[1].length);
        var arr1=data[0].split('').reverse();
        var arr2=data[1].split("").reverse();
        var result=new Array(tmp+1);
        var sign=0;
        var temp;
        for(var i=0;i<result.length;i++){
            if(!arr1[i]){arr1[i]=0;}
            if(!arr2[i]){arr2[i]=0;}
            temp=(arr1[i]-0)+(arr2[i]-0)+sign;
            if(temp>=10){sign=1; result[i]=temp%10;}
            else{sign=0; result[i]=temp;}
        }
		if(result[tmp]==0) result.pop();
		result=result.reverse().join('');
        console.log(result);
        data=[];
    }
})
js的确可以算很大很大的数,然而结果却是科学记数法,并且进行了省略,弄了半天也没有办法禁止使用科学计数法,索性就自己写了一个,用的是数组,还是挺简单的。
发表于 2016-12-09 16:22:57 回复(0)