Codeup-问题 B: A+B

题目描述

给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。

输入

输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。

输出

请计算A+B的结果,并以正常形式输出,每组数据占一行。

样例输入

-234,567,890 123,456,789
1,234 2,345,678

样例输出

-111111101
2346912

起初拿到这一题,我的思路就是,设置两个数组,用来存放这两个数字,然后从最后一位开始,不断利用sum+=str[i]*q,q=q*10;来取出数字,如果遇见“,”则跳过,但是最初计算出的结果是很奇怪的数,后来调试发现,str[i]中不断累加的是数字的ASCII码,而不是真正的数字,于是改进,将sum+=str[i]*q改为sum+=(str[i]-'0')*q,便可以得到想要的数字

具体代码如下:

#include <cstdio>
#include <cstring>

int main()
{
    char str1[12],str2[12];
    while(scanf("%s %s",&str1,&str2)!=EOF)
    {
        int n1,n2;
        int i,q=1,sum1=0,sum2=0,temp1=0,temp2=0;
        int result;
        n1=strlen(str1);
        n2=strlen(str2);
        for(i=n1-1;i>0;i--)
        {
            if(str1[i]==',')
                continue;
            else
            {
                sum1+=(str1[i]-'0')*q;
                q*=10;
            }
        }
        if(str1[0]=='-')
            temp1=-1;
        else
            sum1+=(str1[i]-'0')*q;
        q=1;
        for(i=n2-1;i>0;i--)
        {
            if(str2[i]==',')
                continue;
            else
            {
                sum2+=(str2[i]-'0')*q;
                q*=10;
            }
        }
        if(str2[0]=='-')
            temp2=-1;
        else
            sum2+=(str2[i]-'0')*q;
        if(temp1==-1&&temp2==-1)
                result=-(sum1+sum2);
        else if(temp1==-1&&temp2==0)
            result=(sum2-sum1);
        else if(temp2==-1&&temp1==0)
            result=(sum1-sum2);
        else
            result=(sum1+sum2);
        printf("%d\n",result);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Zizizi9898/article/details/88777226