ACM虐我千百遍(一下子水平就侧漏了o(╯□╰)o)

思路很清晰很简单的一道题,大数相加,用字符串来处理

结果转化成代码时频频出错,索引值 + 1 ,-1 错误尤为突出。

又一次被ACM给虐了。

撸代码能力弱爆了。

http://acm.cs.ecnu.edu.cn/problem.php?problemid=1001

不过总算让我给AC

#include<iostream>
using namespace std;

int main()
{
    void Sum(char A[],char B[],char C[]);
    char A[550],B[550],C[550];
    while(cin >>A && cin >> B)
    {
        Sum(A,B,C);
        cout << C <<endl;
    }
}
void Sum(char A[],char B[],char C[])
{
    int sA = strlen(A);
    int sB = strlen(B);
    int max = sA > sB ?sA:sB;
    //数组分别倒置
    for(int i = 0,j = sA - 1;i < j;i++,j--)
    {
        int t = A[i];
        A[i] = A[j];
        A[j] = t;
    }
    for(int i = 0,j = sB - 1;i < j;i++,j--)
    {
        int t = B[i];
        B[i] = B[j];
        B[j] = t;
    }
    //较短的数组右边补零
    if(sA < max)
    {
        for(int i = sA;i < max;i++)
            A[i] = '0';
    }
    if(sB < max)
    {
        for(int i = sB;i < max;i++)
            B[i] = '0';
    }

    //相加
    int k = 0;
    int o = 0;
    int final = 0;
    for(int i = 0;i < max;i++)
    {
        k = A[i] + B[i] + o - '0' - '0';
        if(k >= 10)
        {
            k -= 10;
            o = 1;
            C[i] = k + '0';
        }
        else
        {
            o = 0;
            C[i] = k + '0';
        }
        final = i;
    }
    if(o!=0)
        {
            C[final + 1] = '1';
            C[final + 2] = '';
        }
    else
        C[final + 1] = '';

    //把C数组倒置
        for(int i = 0,j = strlen(C) - 1; i < j;i++,j--)
    {
        char t = C[i];
        C[i] = C[j];
        C[j] = t;
    }

}
原文地址:https://www.cnblogs.com/StudipBird/p/3186598.html