首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为什么会是WA啊解决思路

2012-05-27 
为什么会是WA啊??????C/C++ code/********************************************************************

为什么会是WA啊??????

C/C++ code
/****************************************************************************************Problem DescriptionI have a very simple problem for you. Given two integers A and B, your job is tocalculate the Sum of A + B.InputThe first line of the input contains an integer T(1<=T<=20) which means the numberof test cases. Then T lines follow, each line consists of two positive integers,A and B. Notice that the integers are very large, that means you should not processthem by using 32-bit integer. You may assume the length of each integer will notexceed 1000.OutputFor each test case, you should output two lines. The first line is "Case #:", #means the number of the test case. The second line is the an equation "A + B = Sum",Sum means the result of A + B. Note there are some spaces int the equation. Output ablank line between two test cases.Sample Input21 2112233445566778899 998877665544332211Sample OutputCase 1:1 + 2 = 3Case 2:112233445566778899 + 998877665544332211 = 1111111111111111110****************************************************************************************/#include <stdio.h>#include <string.h>int main (void){    char a[1000], b[1000], c[1001];        // 最高位和可能会进位, 所以要多一字节存进位.    int n, i, j, k;    int alength, blength, clength;    char carry = 0;                        // 进位标识, 只可能是1/0    while(scanf("%d", &n) != EOF)    {        for (i = 0; i < n; i++)            // 处理 n 组数        {            memset(a, 0, sizeof(a));       // 将所有分配的内存置 0.            memset(b, 0, sizeof(b));            memset(c, 0, sizeof(c));            scanf("%s %s", a, b);          // 输入第 1 和 2 两数.            printf("Case %d:\n", i + 1);            alength = strlen(a);           // 获取数字长度            blength = strlen(b);            clength = (alength >= blength) ? alength : blength;            for (j = alength - 1, k = blength - 1; j >= 0 && k >= 0; j--, k--)            {                if (a[j] + b[k] - '0' + carry > '9') {                    c[clength--] = (a[j] - '0' + b[k] - '0' + carry) % 10 + '0';                    carry = 1;                } else {                    c[clength--] = (a[j] - '0' + b[k] - '0' + carry) % 10 + '0';                    carry = 0;                }            }            while (j >= 0 && clength >= 0) {   // 当 a[] 比 b[] 长时                if (a[j] + carry > '9') {                    c[clength--] = (a[j--] + carry - '0') % 10 + '0';                    carry = 1;                } else {                    c[clength--] = a[j--] + carry;                    carry = 0;                }            }            while (k >= 0 && clength >= 0) {   // 当 b[] 比 a[] 长时                if (a[k] + carry > '9') {                    c[clength--] = (b[k--] + carry - '0') % 10 + '0';                    carry = 1;                } else {                    c[clength--] = b[k--] + carry;                    carry = 0;                }            }            c[clength] = carry + '0';            k = 0;                         // 就不多定义变量了, 复用吧.            while (c[k] == '0') {          // 去除结果中的前导 0.                k++;            }            printf("%s + %s = %s\n\n", a, b, c + k);            carry = 0;                     // 处理下组数之前清零进位位        }    }    return 0;}
要考虑负数么, 有啥好算法么? 谢谢大家了![color=#FF0000][/color]

[解决办法]
不用考虑负数,可以用整数数组计算更快

热点排行