適用於兩個正整數相加,且int和long long 存不下的情況下,用**模擬兩個數相加過程,用vector 存值,實質上就是用vector模擬計算過程,達到數字範圍遠遠高於long long 時的加法操作(本文為1e6)
先上**:
#pragma gcc optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define pm make_pair
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int n =
1e6+50;
const
int mod =
1e9+7;
const
int inf =
0x3f3f3f3f
;const
double eps =
1e-8
;vector<
int> a, b;
vector<
int>
add(vector<
int>
&a, vector<
int>
&b)if
(t) c.
push_back(1
);//如果最後一位要進製直接push_back()即可
return c;
}int
main()
sting a, b; 兩數之大,long long 存不下,固用string暫時存一下,再轉移到vector 中,要注意的是,假設存的數是123456789,在vector中的順序應該為987654321,乙個下標對應一位(個十百千萬),為什麼要這樣做,因為好模擬,我們做加法時經常遇到12 + 98 = 110,如果我們按地位到高位儲存,就是12 98 然後按照我們的計算規則從後往前模擬,這樣模擬完還多了一位,不好弄,如果從前往後模擬,21 89 這樣模擬完了之後可以push_back,輸出時逆序即可。
關於模擬:
設乙個 t 來控制進製,假設該位為8 和 9,8 + 9 = 17,那麼 t % 10 代表本來的答案,t / 10 = 1,代表要進製,計算時實質上就是t = t + a[i] + b[i],再對每一位進行操作。
C 高精度加法模板
1.用字串 陣列進行儲存 2.注意高精度位數的確定 3.注意進製借位處理 include include include include include include define n 10001 using namespace std int main c lenc x if c lenc 0 ...
模板 C 高精度加法
所謂高精度加法就是對兩個和可能會超過long long資料範圍的數進行加法運算。這種情況下,顯然不能使用常規的方法進行運算。那麼,不妨考慮一下人在紙上是如何進行加法運算的。當人進行加法運算時,通常會使兩個數的右端對齊,而且位數較多的放在上面。然後從低位到高位進行運算,若這一位的運算結果與進製的和超過...
演算法模板 高精度加法模板
高精度,字面意思理解,精度高,位數很多,乙個數的位數可能是1e3甚至更高 應用 手動模擬大整數的加法 兩個位數很大,位數可能達到1e3甚至更高的數加法運算直接儲存無法儲存,常規使用字串或者陣列來儲存時間複雜度是o max m,n 但是空間複雜度是2 m n m和n分別是兩個數的位數大小 模擬兩個數進...