HDU1002 A + B Problem II(修正版)

最近又开始做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


posted on 2009-09-14 09:41  Phinecos(洞庭散人)  阅读(1660)  评论(0编辑  收藏  举报

导航