标题:杭州电子科技大学 Online Judge 之 “A + B Problem II(ID1002)”为什么过 ...
只看楼主
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
结帖率:46.15%
 问题点数:0 回复次数:3 
杭州电子科技大学 Online Judge 之 “A + B Problem II(ID1002)”为什么过不了?
感觉应该没问题了,为什么还是WRONG ANSWER?
/*
    Name:
    Copyright:
    Author:
    Date: 05-11-14 22:29
    Description:
    A + B Problem II
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 223072    Accepted Submission(s): 42802


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 an integer T(1<=T<=20) which means the number of 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 process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.

 

Output
For 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 a 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
 

Author
Ignatius.L

*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 1001

int Add(char C[], char *A, char *B);//C = A +  B,确保A,B都是正数

int main(void)
{
    char A[MAX], B[MAX], C[MAX];
    int i, n, leftC;
   
    scanf("%d", &n);
    for (i=1; i<=n; i++)
    {
        scanf("%s%s", A, B);
        leftC = Add(&C, &A, &B);
        printf("Case %d:\n", i);
        printf("%s + %s = ", A, B);
        while (leftC < MAX)
            printf("%d", C[leftC++]);
        printf("\n");
        if (i < n)
            printf("\n");
    }

    return 0;
}

int Add(char C[], char *A, char *B)//C = A +  B,确保A,B都是正数
{
    int lenA = strlen(A) -1;
    int lenB = strlen(B) -1;
    int i, leftC = MAX;
   
    for (i=0; i<MAX; i++) //初始化C
        C[i] = 0;
        
    while (lenA >= 0 && lenB >= 0)
    {
        C[--leftC] += A[lenA--] + B[lenB--];
        if (C[leftC] >= 10)
        {
            C[leftC-1] = C[leftC] / 10;
            C[leftC] %= 10;
        }
    }
    while (lenA >= 0)
    {
        C[--leftC] += A[lenA--] - '0';
        if (C[leftC] >= 10)
        {
            C[leftC-1] = C[leftC] / 10;
            C[leftC] %= 10;
        }
    }
    while (lenB >= 0)
    {
        C[--leftC] += B[lenB--] - '0';
        if (C[leftC] >= 10)
        {
            C[leftC-1] = C[leftC] / 10;
            C[leftC] %= 10;
        }
    }
   
    return leftC;
}
搜索更多相关主题的帖子: Copyright problem Memory Online simple 
2014-11-08 11:30
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
得分:0 
已经解决了!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 1001

int Add(char C[], char * A, char * B);//C = A +  B,确保A,B都是正数

int main(void)
{
    char A[MAX], B[MAX], C[MAX];
    int i, n, leftC;
   
    scanf("%d", &n);
    for (i=1; i<=n; i++)
    {
        scanf("%s%s", A, B);
        printf("Case %d:\n", i);
        printf("%s + %s = ", A, B);
        leftC = Add(C, A, B);
        while (leftC < MAX)
            printf("%d", C[leftC++]);
        printf("\n");
        if (i < n)
            printf("\n");
    }

    return 0;
}

int Add(char C[], char * A, char * B)//C = A +  B,确保A,B都是正数
{
    int lenA = strlen(A) - 1;
    int lenB = strlen(B) - 1;
    int i, leftC = MAX;
   
    for (i=0; i<MAX; i++) //初始化C
        C[i] = 0;

    while (lenA >= 0 && lenB >= 0)
    {
        C[--leftC] += A[lenA--] + B[lenB--] - '0' - '0';
        if (C[leftC] >= 10)
        {
            C[leftC-1] = 1;
            C[leftC] -= 10;
        }
    }
    while (lenA >= 0)
    {
        C[--leftC] += A[lenA--] - '0';
        if (C[leftC] >= 10)
        {
            C[leftC-1] = 1;
            C[leftC] -= 10;
        }
    }
    while (lenB >= 0)
    {
        C[--leftC] += B[lenB--] - '0';
        if (C[leftC] >= 10)
        {
            C[leftC-1] = 1;
            C[leftC] -= 10;
        }
    }

    if (C[leftC-1] > 0) //有进位
        leftC--;
   
    return leftC;
}
2014-11-08 12:40
soulmate1023
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:256
专家分:831
注 册:2014-9-23
得分:0 
超长数相加,学习了。
2014-11-08 13:48
zhuyi8120
Rank: 2
等 级:论坛游民
帖 子:34
专家分:12
注 册:2014-11-4
得分:0 
试验下,如可行,将深入学习
2014-11-10 00:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-438285-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.161515 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved