C++之大数加法

  加法加法。一看到加法就觉得简单,其实不然。因为存储长度的限制,有时候计算1234567891011121345+53616456641321345466613这种加法的时候就会出现很多意料之外的问题。随便的丢出两个int相加,甚至long int相加根本得不到结果。于是,需要借助其他的方式了。

  我们平时自己处理这么大数的加法时都会用竖式,而且是逐个相加,满10进1。以此为基点,我们可以联想到运用string类来处理这些数,将他们的每一位都存储在string中,那么长度为1000的数组就能存储1000位的数字,这样不就可以解决了。

//
//  main.cpp
//  yy
//
//  Created by MadMarical on 15/11/25.
//  Copyright (c) 2015年 com. All rights reserved.
//

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stdexcept>

using namespace std;

#define MAXN 1000

int a[MAXN],b[MAXN];

int main(int argc, const char * argv[])
{
    string str1,str2;//保存输入
    long int len1,len2;
    long int i,j,k;
    int up;
    
    /*输入流程*/
    cin>>str1>>str2;
    
    /*初始化各量*/
    len1 = str1.length();
    len2 = str2.length();
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    
    /*注意,必须倒着保存数据*/
    for (i = len1 - 1, k = 0; i != -1; -- i)
    {
        a[k] = str1[i] - '0';
        k++;
    }
    for (j = len2 - 1, k = 0; j != -1; -- j)
    {
        b[k] = str2[j] - '0';
        k++;
    }
    for (i = 0, up = 0; i < MAXN; ++ i)
    {
        a[i] = a[i] + b[i] + up;
        up = a[i] / 10;
        a[i] %= 10;
    }
    for (i = MAXN - 1; i != -1; -- i)
    {
        if (a[i])
        {
            break;
        }
    }
    for (k = i; k != -1; --k)
    {
        cout<<a[k];
    }
    return 0;
}

反思:

1.细心还是细心,不细心连几个初始化变量为啥子要初始化成这样都搞不明白。

2.算法的重要度可见一斑,稍微改一下思路,代码量就陡增而且问题随之而来。有时候,简单一点的想法未尝不可以尝试。

3.牢记各模块的知识。