有进位的高精度加法

发布时间 2023-04-03 16:09:00作者: Hi,小董先生


【问题描述】
  有两个位数在200以内的高精度数a和b,请编程求出a与b之和。
  输入:两行,第一行为a,第二行为b。
  输出:一行,表示a与b之和C。
  注意:a与b的位数不一定相同。

【输入样例】

  省略

【输出样例】

  省略

#include<iostream>
#include<cstring> 
using namespace std;

int main()
{
    char a[201], b[201];
    int a2[201]={}, b2[201]={}, c2[202]={};
    cin >> a >> b;
    int lena = strlen(a), lenb = strlen(b);
    int max1 = max(lena, lenb);
    // 位数不同,倒序取整。 
    for(int i=0; i<=max1-1; i++)
    {
        a2[i] = a[lena-1-i] - 48;
        b2[i] = b[lenb-1-i] - 48;
    }
    // 大数相加,处理进位(不包含最高位),计算和。
    int x=0, lenc = 0, he;
    while(lenc < max1)
    {
        he = a2[lenc] + b2[lenc] + x;
        x = he/10;
        c2[lenc] = he%10;
        lenc++;
    } 
    // 判断数组a2和b2最高位的和是否产生进位。
    if(x==1) c2[lenc] = x;
    else lenc--;
    for(int i=lenc; i>=0; i--)
    {
        cout << c2[i];
    }
    return 0;
}