日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高精度加法板子

發(fā)布時間:2025/4/5 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高精度加法板子 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

高精度加法

所謂高精度加法,指的是兩個大整數(shù)之間進行的運算。
A+B,一般A,B的位數(shù)不超過 10610^6106位,即1百萬位

一是大整數(shù)的存儲,為了進位方便,需要倒序存放,即把原數(shù)的低位放在數(shù)組的前面,原數(shù)的高位放在數(shù)組的后面。比如 123456789這個大整數(shù),存儲的時候是 A=[987654321],這樣便于進位,直接push_back即可。

二是代碼的實現(xiàn),處理的是兩個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;//存放兩個大整數(shù)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; }

該板子只適合正整數(shù)。

高精度加法題目一道
牛客網(wǎng)計算字符串A+B
題意:給定字符串,判斷是否符合A+B的形式,如果符合,計算結(jié)果。
本題筆者卡在:不會判斷是否符合A+B的形式。解決:首先判斷+的個數(shù)s[i]=='+',cnt++,其次是判斷+的位置(不能在起始或者末尾)pos=find("+"),接下來就是高精度加法

#include<bits/stdc++.h> using namespace std;const int maxn=1e3+10;string s; int n;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);while(C.size()>1&&C.back()==0) C.pop_back();return C; } int main(){cin>>n;while(n--){cin>>s;vector<int> A,B;int cnt=0;for(int i=0;i<s.size();i++){//多個+號或者沒有+號if(s[i]=='+') cnt++;}int pos=s.find("+");//+號的位置//cout<<pos<<endl;if(pos==0||pos==s.size()-1||cnt>1||cnt==0) {cout<<"skipped"<<endl;continue; }string a=s.substr(0,pos);string b=s.substr(pos+1,s.size()-pos-1);//cout<<a<<endl<<b<<endl;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-48);for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-48);auto C=add(A,B);for(int i=C.size()-1;i>=0;i--) cout<<C[i];cout<<endl;}}

總結(jié)

以上是生活随笔為你收集整理的高精度加法板子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。