POJ 1001 高精度浮点数幂中有个加法函数,现在发现竟然没有考虑最高位进位,我是在做了1503高精度加法后才发现的。 上错误代码: #include<iostream> #include<string> using namespace std; string Add(string a,string b) { char c; int i=a.length()-1, j=b.length()-1; string addResult; int remaining=0;//余数 int carry=0;//进位 for(; i>=0 && j>=0; i--,j--) { remaining=((a[i]-'0')+(b[j]-'0')+carry)%10; carry=((a[i]-'0')+(b[j]-'0')+carry)/10; c=(char)(remaining+'10'); addResult.insert((string::size_type)0,1,c);//注意用insert()插入单个字符的用法 } while(j>=0)//b比a长 { remaining=((b[j]-'0')+carry)%10; carry=((b[j]-'0')+carry)/10; c=(char)(remaining+'10'); addResult.insert((string::size_type)0,1,c); j--; } while(i>=0)//b比a长 { remaining=((a[i]-'0')+carry)%10; carry=((a[i]-'0')+carry)/10; c=(char)(remaining+'10'); addResult.insert((string::size_type)0,1,c); i--; } return addResult; } int main() { string a,b,sum; cout<<"9+9="<<Add("9","9")<<endl; cout<<"99+9="<<Add("99","9")<<endl; return 0; } 正确做法应在return前加上对可能的最高位进位的处理: if(carry) { c=(char)(carry+'0'); addResult.insert((string::size_type)0,1,c); }