HDU 1002 大数加法 怀旧

#include <bits/stdc++.h>
using namespace std;
void pre(string &s) {
    int n = s.length();
    int i = 0;
    while (s[i] == '0') ++i;
    s = s.substr(i, n);           //清除前导零
    reverse(s.begin(), s.end());  //竖式右对齐
}
string slove(string a, string b) {
    pre(a), pre(b);
    int lena = a.length(), lenb = b.length();
    if (lena < lenb) swap(a, b), swap(lena, lenb);  //竖式加法,位数更高的放上面
    string ans;
    bool f = 0;  //标记进位
    int i = 0;
    while (i < lenb) {
        int now = a[i] - '0' + b[i++] - '0' + f;  //当前值
        ans.push_back(now % 10 + '0');            //个位
        f = now / 10;                             //进位
    }
    while (i < lena) {
        int now = a[i++] - '0' + f;
        ans.push_back(now % 10 + '0');
        f = now / 10;
    }
    if (f) ans.push_back('1');        //最后的进位
    reverse(ans.begin(), ans.end());  //换回来
    return ans;
}
int main() {
    int T;
    cin >> T;
    string a, b;
    for (int i = 1; i <= T; ++i) {
        cin >> a >> b;
        if (i - 1) putchar('\n');
        cout << "Case " << i << ":\n" << a << " + " << b << " = ";
        cout << slove(a, b) << '\n';
    }
    return 0;
}
算法竞赛之路 文章被收录于专栏

整理、记录算法竞赛的好题

全部评论

相关推荐

哈哈哈,你是老六:我去,这面试还要靠抢啊
点赞 评论 收藏
分享
StephenZ_:我9月份找的第一段实习也是遇到这种骗子公司了,问他后端有多少人和我说7个正职,进去一看只有一个后端剩下的都是产品前端算法(没错甚至还有算法)。还是某制造业中大厂,我离职的时候还阴阳怪气我
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务