hdu.A + B Problem II

Problem Description

I have a very simple problem for you.Given two integers A and B, your job is to calculate the Sum of A + B.

 

 

Input

The first line of the input contains aninteger T(1<=T<=20) which means the number of test cases. Then T linesfollow, each line consists of two positive integers, A and B. Notice that theintegers are very large, that means you should not process them by using 32-bitinteger. You may assume the length of each integer will not exceed 1000.

 

 

Output

For each test case, you should outputtwo lines. The first line is "Case #:", # means the number of thetest case. The second line is the an equation "A + B = Sum", Summeans the result of A + B. Note there are some spaces int the equation. Outputa blank line between two test cases.

 

 

Sample Input

2

1 2

112233445566778899 998877665544332211

 

 

Sample Output

Case 1:

1 + 2 = 3

 

Case 2:

112233445566778899 + 998877665544332211 = 1111111111111111110

 

最重要的是这不是intlong,longlong,数据类型的,AB可能到1000位数,要用字符串去存储,并用字符串输出;

之后的问题就是进位 AB的长度问题

再之,字符常量’1’整形常量1的区别

wa的时候也有输出格式的小问题,每次循环执行的最后一次只有一个换行,其余两个换行

这几个问题考虑到后,花些心思,代码应该出得来

以下是代码:

#include<stdio.h>

#include<string.h>

intmain()

{

       int i, j, step, temp, num;                  // step仅为计数,temp用于判断是否进1

       int n, alen, blen;                             //alen blen 分别表示a[1001],b[1001]的长度

       char a[1001], b[1001], sum[1010];   //a[1001]存储A b[1001]存储B, sum[1001]存储AB的和

       while(scanf("%d", &n) !=EOF){

              num = 0;

              for (i = 1; i <= n; i++)

              {

                     step = 0;

                     temp = 0;

                     scanf("%s %s", a,b);

                     alen = strlen(a);

                     blen = strlen(b);

                     do {

                            step++;

                            if (temp >= 10)

                                   temp = 1;

                            else

                                   temp = 0;                                                 //上一次的temp>10 1

                            temp += a[alen -step] + b[blen - step] - '0' - '0';   

                            sum[step - 1] = temp% 10 + '0';  

                     }while(alen - step != 0&& blen - step != 0);            //alenblen已经到头结束循环

                     if (alen == blen)

                     {

                            if (temp >= 10)

                            {

                                   step++;

                                   sum[step - 1]= '1';

                            }

                            printf("Case%d:\n", ++num);

                            printf("%s + %s= ", a, b);

                            for (j = step - 1; j>= 0; j--)

                                   printf("%c",sum[j]);

                            if (num == n)

                                   printf("\n");

                            else

                                   printf("\n\n");

                     }

                     else if (alen > blen)

                     {

                            while(temp >=10){

                                   step++;

                                   if (step -alen == 1)

                                   {

                                          sum[step- 1] = '1';

                                          break;

                                   }

                                   temp = 1 +a[alen - step] - '0';

                                   sum[step - 1]= temp % 10 + '0';

                            }

                            while(step <alen){

                                   step++;

                                   sum[step - 1]= a[alen - step];

                            }

                            printf("Case%d:\n", ++num);

                            printf("%s + %s= ", a, b);

                            for (j = step - 1; j>= 0; j--)

                                   printf("%c",sum[j]);

                            if (num == n)

                                   printf("\n");

                            else

                                   printf("\n\n");

                     }

                     else

                     {

                            while(temp >=10){

                                   step++;

                                   if (step -blen == 1)

                                   {

                                          sum[step- 1] = '1';

                                          break;

                                   }

                                   temp = 1 +b[blen - step] - '0';

                                   sum[step - 1]= temp % 10 + '0';

                            }

                            while(step <blen){

                                   step++;

                                   sum[step - 1]= b[blen - step];

                            }

                            printf("Case%d:\n", ++num);

                            printf("%s + %s= ", a, b);

                            for (j = step - 1; j>= 0; j--)

                                   printf("%c",sum[j]);

                            if (num == n)

                                   printf("\n");

                            else

                                   printf("\n\n");

                     }                          

              }

       }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值