大数相加

83 阅读1分钟

代码如下:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void alg(string, string);
int main() {
    string s1;
    string s2;

    cin >> s1 >> s2;
    alg(s1, s2);

    cout << endl;
    system("pause");
    return 0;
}
void alg(string s1, string s2) {
    //1.反转
    reverse(s1.begin(), s1.end());
    reverse(s2.begin(), s2.end());
    //2.使s1较长
    if (s1.length() < s2.length()) {
        swap(s1, s2);
    }
    int len1 = s1.length();
    int len2 = s2.length();
    //3.计算
    int *res = new int[len1 + 1];
    int addz = 0, temp = 0;
    int i = 0;
    //3.1.分成三份,第一份公共部分
    for (; i < len2; i++) {
        temp = addz + (s1[i] - '0') + (s2.at(i) - '0');
        res[i] = temp % 10;
        temp > 9 ? addz = 1 : addz = 0;
    }
    //3.2.较长部分
    for (; i < len1; i++) {
        temp = addz + s1[i] - '0';
        res[i] = temp % 10;
        temp > 9 ? addz = 1 : addz = 0;
    }
    //3.3.进位部分
    addz == 1 ? res[len1] = 1 : res[len1] = 0;
    //4.输出
    int p = len1;
    while (true) {
        if (res[p] != 0)
            break;
        p--;
    }
    while (true) {
        cout << res[p];
        if (--p < 0)
            break;
    }

    cout << endl;

}

运行效果:
测试用例