1168:大整数加法
麦兜 / 2019-07-17 / 算法 / 阅读量 138

【题目描述】

求两个不超过200位的非负整数的和。
【输入】

有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】

一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】

22222222222222222222
33333333333333333333

【输出样例】

55555555555555555555

【来源】

No

题目说了 输入可能有多余前导0 不过没事 把数组开大点

#include <iostream>
using namespace std;
int main()
{
    char str1[500] = {'\0'};
    char str2[500] = {'\0'};
    cin >> str1>>str2;
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    int arr[600] = { 0 };
    for (int i = 0; len1 > len2 ? i < len1 :i<len2;i++)
    {
           /*错位运算*/
        arr[i] += (str2[len2 - 1 - i] - '0')>0 ? +(str2[len2 - 1 - i] - '0') : 0;
        arr[i] += (str1[len1 - 1 - i] - '0')>0 ? +(str1[len1 - 1 - i] - '0') : 0;
        
            if (arr[i] >= 10) //满十进一
        {
            arr[i] = arr[i] % 10;
            arr[i + 1]++;
        }
    }

    int index = len1 > len2 ? len1 : len2;
    while (arr[index] == 0) //排除前缀多余的0
        index--;

    for (int i = index; i >= 0; i--)
           cout << arr[i];
}

题解:正常计算是不能通过的 因为长200的整数很大 所以需要加法进位去解决 满十进一

发表留言

人生在世,错别字在所难免,无需纠正。