第一次手写高精度,调了1w遍
string 和 char数组是真的让人头疼。感觉用好这俩玩意必须狂补计算机导论。一开始我有点rz,非要把每一位计算结果存在字符串里,出了10w个bug——包括但不限于乱码、string类型变量的读写、string类型函数返回空串、指针无故消失
我这样的rz只配用int数组储存每一位计算结果。(u1s1,正解应该是这样,而不是存在字符串里= =)
喵的。
(p.s.别忘了考虑由于进位,计算结果的长度可能是max(len1,len2)+1)

#include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[5005],b[5005]; int num1[5005],num2[5005]; int ans[5005]; int main() { cin>>a>>b; int temp=0; int len1=strlen(a),len2=strlen(b); for(int i=0;i<len1;i++) num1[len1-1-i]=a[i]-'0'; for(int i=0;i<len2;i++) num2[len2-1-i]=b[i]-'0'; if(len1<len2) { swap(num1,num2); swap(len1,len2); } for(int i=len2;i<len1;i++) num2[i]=0; if(num1[0]+num2[0]>=10) { temp=1; ans[0]=num1[0]+num2[0]-10; } else if(num1[0]+num2[0]<10) ans[0]=num1[0]+num2[0]; for(int i=1;i<len1;i++) { if(num1[i]+num2[i]+temp>=10) { ans[i]=num1[i]+num2[i]+temp-10; temp=1; } else if(num1[i]+num2[i]+temp<10) { ans[i]=num1[i]+num2[i]+temp; temp=0; } } int ll=len1; if(temp==1) {ans[len1]=1;ll=len1+1;} for(int i=ll-1;i>=0;i--) cout<<ans[i]; return 0; }

#include<iostream> #include<cstdio> #include<cstring> using namespace std; int padd(char s1[],char s2[],int ans[]) { int temp=0,ll; int num1[5005],num2[5005]; int len1=strlen(s1),len2=strlen(s2); for(int i=0;i<len1;i++) num1[len1-1-i]=s1[i]-'0'; for(int i=0;i<len2;i++) num2[len2-1-i]=s2[i]-'0'; if(len1<len2) { swap(num1,num2); swap(len1,len2); } for(int i=len2;i<len1;i++) num2[i]=0; if(num1[0]+num2[0]>=10) { temp=1; ans[0]=num1[0]+num2[0]-10; } else if(num1[0]+num2[0]<10) ans[0]=num1[0]+num2[0]; for(int i=1;i<len1;i++) { if(num1[i]+num2[i]+temp>=10) { ans[i]=num1[i]+num2[i]+temp-10; temp=1; } else if(num1[i]+num2[i]+temp<10) { ans[i]=num1[i]+num2[i]+temp; temp=0; } } ll=len1; if(temp==1) {ans[len1]=1;ll=len1+1;} return ll; } int main() { char a[5005],b[5005]; int ans[5005]; int ll; cin>>a>>b; ll=padd(a,b,ans); for(int i=ll-1;i>=0;i--) cout<<ans[i]; return 0; }