所謂高精度加法就是對兩個和可能會超過long long資料範圍的數進行加法運算。這種情況下,顯然不能使用常規的方法進行運算。那麼,不妨考慮一下人在紙上是如何進行加法運算的。
當人進行加法運算時,通常會使兩個數的右端對齊,而且位數較多的放在上面。然後從低位到高位進行運算,若這一位的運算結果與進製的和超過了9,則對這一位只保留結果的個位數,並使下一位的進製為1。
為了保證能夠容納得下足夠多的位數,這裡我使用了string型別進行數字的儲存。在進行高精度加法之前,為了確保兩個數字位數相等,首先要在較短的數字前面補0。
if
(x.length()
< y.
length()
)//保證y始終時是位數較短的數字字串
swap
(x, y)
;int delta = x.
length()
- y.
length()
;//計算兩個字串的長度差
for(
int i =
0; i < delta; i++
)//在較短的字串前補0,使其長度等於較長的字串的長度
y ="0"+ y;
之後開始從低位到高位進行運算
#include
#include
#include
using
namespace std;
string add_int
(string_x, string _y)
else
}//若迴圈結束後,仍有進製,說明結果超出了加數中較長的乙個的位數,根據加法的法則,應在結果前面加「1」
if(jw ==1)
result +
="1"
;//反轉結果。因為前面是從後往前運算,而字串是從前往後加的,所以要反轉一下
reverse
(result.
begin()
, result.
end())
;return result;
}int
main()
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 高精度加法及模板
適用於兩個正整數相加,且int和long long 存不下的情況下,用 模擬兩個數相加過程,用vector 存值,實質上就是用vector模擬計算過程,達到數字範圍遠遠高於long long 時的加法操作 本文為1e6 先上 pragma gcc optimize 2 include include...
演算法模板 高精度加法模板
高精度,字面意思理解,精度高,位數很多,乙個數的位數可能是1e3甚至更高 應用 手動模擬大整數的加法 兩個位數很大,位數可能達到1e3甚至更高的數加法運算直接儲存無法儲存,常規使用字串或者陣列來儲存時間複雜度是o max m,n 但是空間複雜度是2 m n m和n分別是兩個數的位數大小 模擬兩個數進...