參考:
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長...