HDU1002 A + B Problem II(修正版)

  1. 云栖社区>
  2. 博客>
  3. 正文

HDU1002 A + B Problem II(修正版)

嗯哼9925 2018-01-07 15:46:44 浏览776
展开阅读全文
最近又开始做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; 

复制代码


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2009/09/14/1566129.html,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
嗯哼9925
+ 关注