洛谷题单指南-模拟和高精度-P1601 A+B Problem

原题链接:https://www.luogu.com.cn/problem/P1601

题意解读:本题是高精度加法的模版题。

知识点解析:

  高精度加法:

  如果一个数大到远超过整形变量的范围时,就不能使用int、long、long long等变量来存储整数,也不能直接通过变量加法来求和。

  因此,需要回到加法计算的本质,从个位开始,逐位相加,即可求得结果,要实现该操作,需要解决几个关键问题:

  1、 整数的存储

  要实现逐位相加,必须将数的每一个数字拆解出来,用数组存储,实际编程中,用vector更方便。

  比如:数字12345存储到vector中,是将数字当做string来处理,从后往前遍历,依次提取数字存入vector

    string a  = "12345";
    vector<int> aa;
    for(int i = a.size() - 1; i >= 0; i--) 
        aa.push_back(a[i] - '0');

  2、加法操作

  逐位相加时,当前位的结果是两个数字相加%10,再加上上一位的进位,举例:

  计算12345 + 789

  12345存储为{5, 4, 3, 2, 1}

  789存储为{9, 8, 7}

  个位在前是为了便于优先计算个位,另外定义一个vector数组用来存储结果,初始值{ }

  第一步:计算5 + 9 = 14,当前位的结果是14 % 10 = 4,本次进位是14 / 10 = 1,

  此时结果为{4}

  第二步:计算4 + 8 = 12, 当前位的结果是12 % 10 + 上一次的进位 = 3,本次进位是12 / 10 = 1,

  此时结果为{4, 3}

  第三步:计算3 + 7 = 10, 当前位的结果是10 % 10 + 上一次的进位 = 1,本次进位是10 / 10 = 1,

  此时结果为{4, 3, 1}

  第四步:12345计算到2了,789各个数字都已计算完,因此当前位的结果是2 % 10 + 上一次的进位 = 3,本次进位是2 / 10 = 0,

  此时结果为{4, 3, 1, 3}

  第五步:12345计算到1了,789各个数字都已计算完,因此当前位的结果是1 % 10 + 上一次的进位 = 1, 本次进位是1 / 10 = 0,

  此时结果为{4, 3, 1, 3, 1},转成数字即13134。

  3、收尾

  最后一次数字计算之后,要判断进位,如果进位是0,则当前结果即最终结果,如果进位是1,则结果数组还需要加入1,

  举例:计算56 + 78

  第一步计算6 + 8,结果4,进位1,当前和的结果{4};

  第二步计算5 + 7,结果3,进位1,当前和的结果{4, 3};

  数字全部计算完毕,进位是1,当前和的结果是{4, 3, 1},转成数字即134。

100分代码:

 

#include <bits/stdc++.h>
using namespace std;

vector<int> add(vector<int> a, vector<int> b)
{
    vector<int> res; //结果
    int t = 0; // 进位

    int len = max(a.size(), b.size());
    for(int i = 0; i < len; i++)
    {
        if(i < a.size()) t += a[i];
        if(i < b.size()) t += b[i];
        res.push_back(t % 10);
        t = t / 10;
    }
    if(t) res.push_back(t);
    return res;
}

int main()
{
    string a, b;
    cin >> a >> b;

    vector<int> aa;
    vector<int> bb;

    for(int i = a.size() - 1; i >= 0; i--) aa.push_back(a[i] - '0');
    for(int i = b.size() - 1; i >= 0; i--) bb.push_back(b[i] - '0');

    vector<int> result = add(aa, bb);

    for(int i = result.size() - 1; i >= 0; i--) cout << result[i];

    return 0;
}

 

posted @ 2024-01-17 23:11  五月江城  阅读(41)  评论(0编辑  收藏  举报