高精度加法板子
高精度加法
所謂高精度加法,指的是兩個大整數之間進行的運算。
A+B,一般A,B的位數不超過 10610^6106位,即1百萬位
一是大整數的存儲,為了進位方便,需要倒序存放,即把原數的低位放在數組的前面,原數的高位放在數組的后面。比如 123456789這個大整數,存儲的時候是 A=[987654321],這樣便于進位,直接push_back即可。
二是代碼的實現,處理的是兩個vector,需要ans=進位位+A[i]+ B[i]
該位存放的是 上述ans對10取余;進位是上述ans/10;
ac代碼
#include<iostream> #include<algorithm> #include<vector> #include<string> using namespace std; const int manx=1e6+10;//模擬列豎式加法 vector<int> add(vector<int> &A ,vector<int> &B){vector<int> C;int t=0;//進位for(int i=0;i<A.size()||i<B.size();i++){if(i<A.size()) t+=A[i];if(i<B.size()) t+=B[i];C.push_back(t%10);t/=10;}if(t) C.push_back(1);return C;//倒序}int main(){string a,b;cin>>a>>b;//a="123456"vector<int> A,B;//存放兩個大整數for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0'); //A= [ 654321],倒敘存放for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');auto C=add(A,B);for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]); //倒序輸出,高位位于前面return 0; }該板子只適合正整數。
高精度加法題目一道
牛客網計算字符串A+B
題意:給定字符串,判斷是否符合A+B的形式,如果符合,計算結果。
本題筆者卡在:不會判斷是否符合A+B的形式。解決:首先判斷+的個數s[i]=='+',cnt++,其次是判斷+的位置(不能在起始或者末尾)pos=find("+"),接下來就是高精度加法
總結
- 上一篇: 为什么石膏板吊顶开裂?
- 下一篇: 租房遇到无良中介应该怎么办?