大數的處理

2021-07-26 11:58:27 字數 2049 閱讀 2742

參考:

ac**如下

#include 

#include

using namespace std;

// 大數相乘

string bigintegerplus(string res, string plusn)

int len1 = res.length(), len2 = plusn.length();

for (int i = len2-1; i>=0; --i )

if (gobit != 0)

tmp.insert(0, string(1,gobit +'0'));

for (int m=0; m< len2 -1-i; ++m)

tmp.push_back('0');// 補位

// 相乘後就相加 大數相加

if (i == len2-1)

ret = tmp;

else

if (gobit2 != 0)

ret.insert(0, string(1,gobit +'0'));

}

}

// 去掉前導0

while (ret.length() >1 && ret[0] == '0')

ret.erase(0,1);

return ret;

} int main(int argc, char** argv)

return

0;

}

總的思路比較簡單, 就是模擬手算。 用較短(或相等)長度的數的每一位與較長數一一相乘。要注意的是,相乘所得結果需要補0的細節 。然後就是單純的大數相加。

用c++的string來做 寫起來挺順手的。

參考:題意很簡單,就是求兩個任意整數之和。

原題在:

首先說一下正確的思路:

第一步:

輸入的處理:

如果輸入是00000123344需要處理為123344。

函式為:

[cpp] view plain copy

string &_del_zeros_before_dot(string &a)

第二步:

求和,在求和的時候,因為兩個正整數求和,最多增加的位數是1(也就是字串的長度增加了1)。

再者需要把兩個字串都要處理完。在處理完兩個字串之後,一定要記得處理進製的情況。

這裡簡化了這些處理。看簡單的**。

[cpp] view plain copy

string &_string_add_string(const

string &a, const

string &b, string &res)

if (res[0] == '0') res = res.substr(1, res.length() -1);

return res;

}

由於結果第一位不能是0,所以最後需要把res的第一位做判斷,是否刪除。

第三步:

給出ac的**

[cpp] view plain copy

#include

#include

using

namespace

std;

string &_del_zeros_before_dot(string &a)

string &_string_add_string(const

string &a, const

string &b, string &res)

if (res[0] == '0') res = res.substr(1, res.length() - 1);

return res;

} int main(void)

return

0;

}

大數的處理

一般情況下,如果涉及到大數問題一般都會採用字元陣列來解決,在使用字元陣列時,需要注意的問題 1.首先宣告整數陣列,陣列中的每個元素都當做單獨的數字進行運算.2.陣列的初始化,根據計算型別的不同初始化操作也不同 3.每個陣列元素進行運算完畢後,必須進行進製處理,進製時原有數字與進製 a i 1 a i...

大資料的處理

大資料時代,大家都在從資料中淘金。龐大的資料量隱藏著一些重要的資訊,這些需要被挖掘,來輔助企業制定決策。龐大的資料量如何轉化為有價值的資訊呢?參考hadoop的設計,使用分布式檔案系統hdfs來儲存超大規模的資料集,使用分布式計算框架來處理資料。其中hdfs的設計 是一次寫入,多次讀取。hdfs是如...

對大數的處理

問題 輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到999。解題思路 首先注意n沒有規定範圍,意味著n可以輸入很大的值,那麼這種情況下,無論時用整型還是長整型都會溢位。所以需要考慮大數問題。可以通過字串來解決大數問題。因為數字最大是n位的,需要用乙個n 1長...