高精度计算-加法

高精度计算-加法

#include <iostream>
#include <algorithm>
using namespace std;
int a[1000]={0},b[1000]={0};

//字符串反向转成数组
void init(string s,int a[]){
    //我们把字符串的长度,也就是数字的位数,存在a[0]
    a[0]=s.length();
    //字符串反向转成数组
    for(int i=1;i<=a[0];i++){
        a[i]=s[a[0]-i]-'0';
    }
}

//逐位相加,并且进位
void add(int a[],int b[]){
    //确定a数组和b数组位数的最大值,这样逐位相加做循环的时候好做
    a[0]=max(a[0],b[0]);
    //逐位相加
    for(int i=1;i<=a[0];i++){
        a[i]+=b[i];
    }
    //处理进位
    for(int i=1;i<=a[0];i++){
        if(a[i]/10) a[i+1]+=a[i]/10;
        a[i]%=10;
    }
    //最高位进位的话,要将数字的长度加1
    if(a[a[0]+1]) a[0]++;
}

//反向输出数组
void print(int a[]){
    for(int i=a[0];i>=1;i--){
        cout<<a[i];
    }
    cout<<endl;
}

int main(){
    string sa,sb;
    cin>>sa;
    cin>>sb;
    init(sa,a);
    init(sb,b);
    add(a,b);
    print(a);
    return 0;
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容