码迷,mamicode.com
首页 > 其他好文 > 详细

大整数加法计算

时间:2018-07-22 15:12:55      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:ring   cout   字符   很多   一个   turn   步骤   class   strong   

普通数字的运算,我们可以直接运用已有类型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;
}

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

大整数加法计算

标签:ring   cout   字符   很多   一个   turn   步骤   class   strong   

原文地址:https://www.cnblogs.com/coolcpp/p/bigint-add.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!