高精度加法

#include<iostream>
#include<vector>
#include<string>
 
using namespace std;

typedef vector<int> ve;//用ve代替vector<int>,避免后续麻烦

ve add(ve &A, ve &B)
{
    ve C;
    int t = 0;//用来储存每次相加的值
    for (int i = 0; i < A.size() || i < B.size(); i++)
    {
        if (i < A.size()) t += A[i];
        if (i < B.size()) t += B[i];
        C.push_back(t % 10);//只保留个位数
        t /= 10;//非个位数则进位
    }

    if (t) C.push_back(t);//如果t不等于零,则代表还有最高的一位没放到C里,如果t等于0,则不用放

    return C;
}

int main()
{
    string sum1, sum2;//因为数据太大,所以用string定义来输入
    cin >> sum1 >> sum2;
    
    ve A, B;

    //循环,将sum1,sum2中的值放入A,B中,倒着放,因为加法运算是从各位开始加的
    for (int i = sum1.size() - 1; i >= 0; i--) A.push_back(sum1[i] - '0');
    for (int i = sum2.size() - 1; i >= 0; i--) B.push_back(sum2[i] - '0');

    ve res = add(A, B);

    for (int i = res.size() - 1; i >= 0; i--)//倒着输出,因为储存是高位在后,低位在前,输出应高位在前,低位在后
    {
        cout << res[i];
    }
    return 0;
}
posted @ 2021-12-13 20:59  ora12321  阅读(5)  评论(0)    收藏  举报