最近又开始做ACM题目了,昨天无意中翻阅自己写的一些blog,在07年写的一篇blog:http://www.cnblogs.com/phinecos/archive/2007/12/22/1011028.html,发现评论中有朋友报了一个bug,随手调试了下程序,发现错误原因在于少了“++”,不过那代码也是AC了的,这说明OJ的测试数据有问题。特此修正代码如下:
- #include <iostream>
- #include <string>
- using namespace std;
- void Add(string a,string b,char sum[],int& count)
- {//大数加法
- int len1 = a.length();//数a的长度
- int len2 = b.length();//数b的长度
- int i = len1-1,j = len2-1,temp = 0,carryIn = 0;//初始进位为
- count = 0;
- //从最后一位开始做加法
- while(i>=0&&j>=0)
- {
- temp = a[i]-'0'+b[j]-'0'+carryIn;//计算当前位
- sum[count++] = temp%10+'0';
- carryIn = temp/10;//计算进位
- --i;
- --j;
- }
- //第一个数还有剩余
- if(i>=0)
- {
- //利用进位继续做
- while(i>=0)
- {
- temp = a[i]-'0'+carryIn;
- sum[count++] = temp%10+'0';
- carryIn = temp/10;
- --i;
- }
- }
- //第二个数还有剩余
- if(j>=0)
- {
- while(j>=0)
- {
- temp = b[j]-'0'+carryIn;
- sum[count++] = temp%10+'0';
- carryIn = temp/10;
- --j;
- }
- }
- //最高位特殊考虑下
- if(carryIn>0)
- {
- sum[count++] = '1';
- }
- }
- void reversePrint(char arr[],int len)
- {//逆向输出
- for(int i=len-1;i>=0;--i)
- {
- cout<<arr[i];
- }
- cout<<endl;
- }
- int main()
- {
- string a,b;
- char sum[2000];//和
- memset(sum,'0',2000);
- int nCount = 0;
- int caseNum,curCase=0;
- cin>>caseNum;
- do
- {
- curCase++;
- cin>>a>>b;
- Add(a,b,sum,nCount);
- cout<<"Case "<<curCase<<":"<<endl;
- cout<<a<<" + "<<b<<" = ";
- reversePrint(sum,nCount);
- if(curCase<caseNum)
- {
- cout<<endl;
- }
- }while(curCase<caseNum);
- return 0;
- }
转载于:https://blog.51cto.com/phinecos/368945