高精度加法,没什么说的 发现用string对齐位数后模拟加法,比先倒转后再加慢很多,一个110ms,一个0ms,应该是对齐的时候时间开销比较大 代码: #include<iostream> #include<string> using namespace std; int maxLen,len; char tem[101]; int s[110],t[110]; void add2() { int i,j; for(i=0;i<maxLen;i++) { s[i]+=t[i]; if(s[i]>9) { s[i]-=10; s[i+1]++; } } if(s[maxLen]) maxLen++; } string add(string sum,string temp) { int i,t,carry,m;//carry 进位 string str; if(maxLen>len) { for(i=1;i<=maxLen-len;i++) temp="0"+temp;//这里时间开销应该很大 } else { for(i=1;i<=len-maxLen;i++) sum="0"+sum; } carry=0; for(i=sum.length()-1;i>=0;i--) { t=sum[i]-'0'+temp[i]-'0'+carry; if(t>9) { carry=1; m=t-10; } else { carry=0; m=t; } str=char(m+'0')+str; } if(carry!=0) str=char(carry+'0')+str; return str; } int main() { int i; //string sum,temp; maxLen=1; //sum="0"; while(cin>>tem) { if(tem[0]=='0'&&strlen(tem)==1) { //cout<<sum<<endl; for(i=maxLen-1;i>=0;i--) cout<<s[i]; cout<<endl; break; } len=strlen(tem); if(len>maxLen) maxLen=len; memset(t,0,sizeof(t)); for(i=len-1;i>=0;i--) t[len-1-i]=tem[i]-'0'; add2(); //sum=add(sum,temp); //maxLen=sum.length(); } return 0; }