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.牢記各模塊的知識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM