1.讀取方式:
利用 c++ string 讀取
2.儲存方式:
利用c++ vector 儲存
示例:
string a, b;
vector<
int> a, b;
cin >> a >> b;
// 對每個字元型數字減去 '0'
for(
int i = a.
size()
-1; i >=
0; i--
) a.
push_back
(a[i]
-'0');
// 數字逆序儲存 低位先存 高位後存
for(
int i = b.
size()
-1; i >=
0; i--
) b.
push_back
(b[i]
-'0'
);
/*
保證(len)a ≥(len)b
從低位到高位遍歷
t += a[i]
t += b[i] 直到b的位次遍歷完為止
c.push_back(t % 10)
t /= 10
最後判斷是否還存在進製 存在則c.push_back(1)
*/vector<
int>
add(vector<
int>
&a, vector<
int>
&b)if
(t) c.
push_back(1
);return c;
}
/*
因為輸出存在帶負號的問題 所以要先判斷一下a b的大小
注意我們儲存的時候是低位在前邊
*/// 判斷是否有a >= b 從高位依次往低位看
bool
cmp(vector<
int>
&a, vector<
int>
&b)}
return
true;}
/*從低位到高位遍歷
先減去進製 再減去b[i]
然後push % 10 再看是否要進製
*/vector<
int>
sub(vector<
int>
&a, vector<
int>
&b)while
(c.size()
>
1&& c.
back()
==0) c.
pop_back()
;// 刪除前導0 如0001 則為 1
return c;
}
// c = a * b
/*每次都用a的該位乘以b
*/ vector<
int>
mul(vector<
int>
&a,int b)
while
(c.size()
>
1&& c.
back()
==0) c.
pop_back()
;return c;
}
// c = a * b
vector<
int>
div(vector<
int>
&a,int b,
int&r)
reverse
(c.begin()
, c.
end())
;// 反轉c
while
(c.size()
>
1&& c.
back()
==0) c.
pop_back()
;return c;
}
C 高精度整型數四則運算
高精度運算的實現思路,就是模擬人們在進行運算時的方法步驟。高精度的數數字比較多,用 int 陣列實現的話會浪費很多空間,這裡我們用 string 去實現。考慮到我們在手動做加減乘法的時候,都是從低位向高位做,只有除法是高位向低位做,為方便運算的實現,這裡我們倒著去存乙個數,例如,我們用 65248 ...
ACM學習歷程25 高精度四則運算
在acm的題目中會涉及到一些四則運算,需要注意的是這裡參與四則運算的資料的資料型別並非整型。事實上,儘管整型可以分配4個位元組的儲存空間,但是它所能表示的資料範圍仍然是有限的,所以在比賽上遇到加法等一些涉及四則運算的題目時,一定要留意最終結果或者中間結果是否會超出基本資料型別的表示範圍。如果確定利用...
高精度四則運算 大數加減乘除
791 高精度加法 給定兩個正整數,計算它們的和。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的和。資料範圍 1 整數長度 100000 輸入樣例 1223 輸出樣例 35 include include define lenmax 100000 int main while i ...