【洛谷 P1601】A+B Problem(高精)题解(高精度+向量)
  VJeqq9jk2lCR 2023年12月11日 13 0

A+B Problem(高精)

题目描述

高精度加法,相当于 a+b problem,不用考虑负数

输入格式

分两行输入。【洛谷 P1601】A+B Problem(高精)题解(高精度+向量)_#include

输出格式

输出只有一行,代表 【洛谷 P1601】A+B Problem(高精)题解(高精度+向量)_#define_02 的值。

样例 #1

样例输入 #1

1
1

样例输出 #1

2

样例 #2

样例输入 #2

1001
9099

样例输出 #2

10100

思路

模拟十进制加法,逢10进一。

AC代码

#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
#define AUTHOR "HEX9CF"
using namespace std;

const int maxn = 100005;

void printv(vector<int> v){
    vector<int>::iterator it = v.begin();
    for(; it != v.end(); it++){
        cout << *it;
    }
}

int main() {
    char ch;
    string str1, str2;
    stringstream ss1, ss2;
    vector<int> v1, v2, v3;
    cin >> str1 >> str2;
    ss1 << str1;
    ss2 << str2;
    while(ss1 >> ch){
        v1.push_back(ch - '0');
    }
    while(ss2 >> ch){
        v2.push_back(ch - '0');
    }
    reverse(v1.begin(), v1.end());
    reverse(v2.begin(), v2.end());
    vector<int>::iterator it1 = v1.begin();
    vector<int>::iterator it2 = v2.begin();
    for(;it1 != v1.end() && it2 != v2.end();it1++, it2++){
        int sum = *it1 + *it2;
        v3.push_back(sum);
    }
    for(;it1 != v1.end();it1++){
        v3.push_back(*it1);
    }
    for(;it2 != v2.end();it2++){
        v3.push_back(*it2);
    }
    vector<int>::iterator it3 = v3.begin();
    int flg = 0;
    for(;it3 != v3.end(); it3++){
        if (*it3 > 9)
        {
            *it3 -= 10;
            if (v3.end() == it3 + 1)
            {
                flg = 1;
            }
            else
            {
                *(it3 + 1) += 1;
            }
        }
    }
    if(flg){
        v3.push_back(1);
    }
    reverse(v3.begin(), v3.end());
    printv(v3);

    return 0;
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月11日 0

暂无评论

推荐阅读
VJeqq9jk2lCR