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");

                     }                          

              }

       }

}

HDU 2034 是一道经典的 A-B Problem 题目,通常涉及简单的数学运算或者字符串处理逻辑。以下是对此类问题的分析以及可能的解决方法。 ### HDU 2034 的题目概述 该题目要求计算两个数之间的差值 \(A - B\) 并输出结果。需要注意的是,输入数据可能存在多种情况,因此程序需要能够适应不同的边界条件和特殊情况[^1]。 #### 输入描述 - 多组测试数据。 - 每组测试数据包含两行,分别表示整数 \(A\) 和 \(B\)。 #### 输出描述 对于每组测试数据,输出一行表示 \(A - B\) 的结果。 --- ### 解决方案 此类问题的核心在于正确读取多组输入并执行减法操作。以下是实现此功能的一种常见方式: ```python while True: try: a = int(input()) b = int(input()) print(a - b) except EOFError: break ``` 上述代码片段通过循环不断接收输入直到遇到文件结束符 (EOF),适用于批量处理多组测试数据的情况。 --- ### 特殊考虑事项 尽管基本思路简单明了,在实际编码过程中仍需注意以下几点: 1. **大数值支持**:如果题目中的 \(A\) 或 \(B\) 可能非常大,则应选用可以容纳高精度的数据类型来存储这些变量。 2. **负数处理**:当 \(B>A\) 导致结果为负时,确保程序不会因符号错误而失效。 3. **异常捕获**:为了防止运行期间由于非法字符或其他意外状况引发崩溃,建议加入必要的错误检测机制。 --- ### 示例解释 假设给定如下样例输入: ``` 5 3 7 2 ``` 按照以上算法流程依次完成各步操作后得到的结果应当分别为 `2` 和 `5`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值