大整数的加法(c++)string字符串模拟过程

tech2023-02-08  101

大整数的加法 需要模拟加法的过程

第一种思路: 把加法进位统一处理 第二种思路: 进位边做边处理

//author:zq #include<iostream> #include<string> using namespace std; int main(){ //高精度加法 string a,b,c; int h; cin>>a>>b; if(a.length()<b.length()){ c=a; a=b; b=c; } //cout<<a[0]<<endl<<b[0]<<endl; h=a.length(); int s[h+5]={0}; int s1,s2; for(int i=0;i<b.length();i++){ s1=b[b.length()-1-i]-'0'; s2=a[a.length()-1-i]-'0'; s[i]=s1+s2; // cout<<i<<" "<<s[i]<<endl; } for(int j=b.length();j<a.length();j++){ s2=a[a.length()-1-j]-'0'; s[j]=s2; // cout<<j<<" "<<s[j]<<endl; } for(int i=0;i<a.length();i++){ if(s[i]>9){ s[i+1]=s[i+1]+1; s[i]=s[i]-10; } } int hs=h+3; while(s[hs]==0)hs--; for(int i=hs;i>=0;i--){ cout<<s[i]; } return 0; } //author:zq #include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; void Switch(string &a,string &b){ string c=a; a=b; b=c; } int main(){ string a,b; int len1,len2,p; while(cin>>a>>b){ vector<int>obj; len1=a.size(); len2=b.size(); if(len2<len1){ Switch(a, b); } int remain=0; int i=a.size()-1; int j=b.size()-1; for(;i>=0;i--,j--){ p=a[i]-'0'+b[j]-'0'+remain; if(p>=10){ remain=1; p=p-10; obj.push_back(p); }else{ obj.push_back(p); remain=0; } } for(;j>=0;j--){ p=b[j]-'0'+remain; if(p>=10){ remain=1; p=p-10; obj.push_back(p); }else{ obj.push_back(p); remain=0; } } if(remain==1){ obj.push_back(1); } for(int k=obj.size()-1;k>=0;k--){ cout<<obj[k]; } obj.clear(); cout<<endl; } return 0; }
最新回复(0)