1.大数相加
1.1 思路:
数组模拟小学加法过程 就行
首先将 str1 ,str2 逆序存入 a[ ],b[ ],c[ ] 记录结果
Max=( str1,str2 ) + 1
for 0 to Max-1
a[ i ] 加入,b[ i ] 加入
c[ i + 1 ] = c [ i ] /10; //进位
c[ i ] = c[ i ] %10;
end
删除前导零
1.2 代码模板:
#include<iostream> #include<algorithm> #include<cstring> #include<string> using namespace std; int c[205],num; void Plus(string A,string B){ int a[205],b[205]; int sa=A.size(),sb=B.size(); num=max(sa,sb)+1; for(int i=0;i<sa;i++) a[i]=A[sa-i-1]-'0'; for(int i=0;i<sb;i++) b[i]=B[sb-i-1]-'0'; c[0]=0; for(int i=0;i<num;i++){ if(i<sa)c[i]+=a[i]; if(i<sb)c[i]+=b[i]; c[i+1]=c[i]/10; c[i]%=10; } while(!c[num]&&num>=1)num--; } int main(){ string A,B; cin>>A>>B; Plus(A,B); for(int i=num;i>=0;i--) cout<<c[i]; cout<<endl; return 0; }
1.3 函数主体
int c[205],num; void Plus(string A,string B){ int a[205],b[205]; int sa=A.size(),sb=B.size(); num=max(sa,sb)+1; for(int i=0;i<sa;i++) a[i]=A[sa-i-1]-'0'; for(int i=0;i<sb;i++) b[i]=B[sb-i-1]-'0'; c[0]=0; for(int i=0;i<num;i++){ if(i<sa)c[i]+=a[i]; if(i<sb)c[i]+=b[i]; c[i+1]=c[i]/10; c[i]%=10; } while(!c[num]&&num>=1)num--; }
1.4 其他模板(更简单)
string Plus(string str1,string str2){ string str; int len1=str1.size(),len2=str2.size(); if(len1<len2){ for(int i=1;i<=len2-len1;i++){ str1="0"+str1; } } else{ for(int i=1;i<=len2-len1;i++){ str2="0"+str2; } } len1=str1.size(); int num=0; int t; for(int i=len1-1;i>=0;i--){ t=str1[i]-'0'+str2[i]-'0'+num; num=t/10;//进位 t%=10; str=char(t+'0')+str; } if(num=0) str=char(num+'0')+str; return str; }
2.大数相减
1.1 思路: