返回主页

高精度加法

两个高精度数相加的普通实现

课堂示例发布于 2026/09/12#高精度
C++31 行846 Bytes
下载文件
#include<bits/stdc++.h>
using namespace std;
int main(){
    string a,b;
    cin>>a>>b;
    //翻转对齐
    int a_len = a.size(),b_len = b.size();
    int a_digit[305] = {0},b_digit[305] = {0};
    for(int i=0,j=a_len-1;i<a_len;i++,j--) 
        a_digit[j] = a[i]-'0';
    for(int i=0,j=b_len-1;i<b_len;i++,j--) 
        b_digit[j] = b[i]-'0';
    
    //按位加和
    int c_len = max(a_len,b_len);
    int c_digit[305] = {};
    for(int i=0;i<c_len;i++){
        c_digit[i] = a_digit[i] + b_digit[i];
    }
    //进位
    for(int i=0;i<c_len;i++){
        c_digit[i+1] += c_digit[i]/10;
        c_digit[i] %= 10;
    }
    //最高位c_digit[c_len-1]进位    //则c_digit[c_len]不为0
    if(c_digit[c_len] > 0) c_len++;
    
    //逆序输出,从高位开始输出
    for(int i=c_len-1;i>=0;i--) cout<<c_digit[i];
    return 0;
}