大整数加法计算

Posted coolcpp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大整数加法计算相关的知识,希望对你有一定的参考价值。

普通数字的运算,我们可以直接运用已有类型int, long, long long等等计算,但要是数字非常大,这些类型是远远装不下的。

故而很多情况下需要我们自己来设置大整数运算,本篇记录的是大整数的加法运算的方法。

对于加法运算,第一个方法是模拟手算。先来看看手算的步骤:
技术分享图片

手算的时候,我们会先把个位相加,有进位则向前进一位,然后计算下一位,重复此步骤。若两个数的位数不同,计算时我们会把位数长的放在上面,位数短的放在下面。短位的数加完后,长位的数则和0相加。

实现加法计算的思路很简单,首先把数字都当作字符串对待,因为字符串是可以根据内存无限长的。在C语言中我们可以用char数组来表示,C++可以用string。然后我们需要再定义一个保存的结果字符串,它的长度可以初步设置为较长数字的长度。

实现代码:

#include <iostream>
#include <string>


std::string Add(std::string a, std::string b)
{
    //a一直为位数较长的字符串
    if (a.length() < b.length())
    {
        a.swap(b);
    }

    std::string result(a.length(), 0);  //初步设置result长度为较长字符长度

    b.insert(0, a.length() - b.length(), ‘0‘);  //较短的字符串前面补零,方便计算

    int carry = 0;  //进位
    for (int i = a.length() - 1; i >= 0; i--)
    {
        int sum = (a[i] - 48) + (b[i] - 48) + carry;
        carry = sum / 10;
        result[i] = sum % 10 + 48;
    }

    //若进位不为0,还要在前面补上进位
    if (carry != 0)
    {
        result.insert(result.begin(), carry + 48);
    }

    return result;
}

int main()
{
    std::string a, b;
    std::cin >> a >> b;
    std::cout << Add(a, b);

    std::cin.get();
    return 0;
}

现在我们可以轻松计算超大整数的加法运算了。
技术分享图片



以上是关于大整数加法计算的主要内容,如果未能解决你的问题,请参考以下文章

大整数加法

1151: 大整数加法(正数)

高精度计算:大整数加法

大整数加法和大整数乘法

ZZNUOJ_用C语言编写程序实现1153:大整数加法(附完整源码)

用JAVA线性表来编写“任意大的整数相加减”