注册 登录
编程论坛 C++教室

HDOJ大数加法 请大家帮我修改一下!

Ljldym 发布于 2016-05-10 20:43, 3457 次点击
只有本站会员才能查看附件,请 登录

程序代码:
#include"iostream"
#include"string"
using namespace std;
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int flag = 1;
        char a[1010], b[1010], c[1011];
        memset(a, '0', sizeof(a));
        memset(b, '0', sizeof(b));
        memset(c, '0', sizeof(c));
        cin >> a >> b;
        int l = (strlen(a) >= strlen(b)) ? strlen(a) : strlen(b);
        for (int l = strlen(a), i = 0; i < l/2; i++)
        {
            char t = a[i];
            a[i] = a[l - i - 1]-48;
            a[l - i - 1] = t-48;
        }
        for (int l = strlen(b), i = 0; i < l/2; i++)
        {
            char t = b[i];
            b[i] = b[l - i - 1]-48;
            b[l - i - 1] = t-48;
        }   
        for (int i = 0; i < l; i++)
        {
            c[i] = a[i] + b[i];
            for (int i = 0; i < l; i++)
            if (c[i] >= 10)
            {
                c[i] = c[i] % 10;
                c[i + 1] =c[i]+ 1;
            }
        }

    cout << "Case " << flag << ":" << endl;
    for (int i = strlen(a) - 1; i >= 0; i--)
    {
        a[i] += 48;
        if (a[i] == '0')
            continue;
        cout << a[i];
    }   
        cout << " + ";
        for (int i = strlen(b) - 1; i >= 0; i--)
        {
            b[i] += 48;
            if (b[i] == '0')
                continue;
            cout << b[i];
        }
        cout << " = ";
        for (int i = 1005; i >= 0; i--)
        {
            if (c[i] == '0')
                continue;
            c[i] += 48;
            cout << c[i];
        }
        cout << endl;
        flag++;
    }
}
2 回复
#2
rjsp2016-05-11 08:30
输入
1
9 23
后,至 for (int i = 0; i < l; i++) 时,a和b的值分别是:
a = '9', 0 ,'\0','\0','\0','\0',……
b =  3 , 2 ,  0 ,'\0','\0','\0',……

#3
rjsp2016-05-11 08:55
随手写的,没测试过,可能有误,仅供参考
程序代码:
#include <iostream>
#include <cstring>
using namespace std;

int main( void )
{
    unsigned t;
    cin >> t;
    for( unsigned i=0; i!=t; ++i )
    {
        char a[1001], b[1001], c[1002];
        cin >> a >> b;

        const char* pa = a+strlen(a)-1;
        const char* pb = b+strlen(b)-1;
        char* pc = c+sizeof(c)/sizeof(*c)-1;
        *pc = '\0';

        for( int carry=0; pa>=a || pb>=b || carry!=0; --pa,--pb )
        {
            int t = carry + (pa>=a?*pa-'0':0) + (pb>=b?*pb-'0':0);
            *--pc = t%10 + '0';
            carry = t/10;
        }

        cout << "Case " << i << ":\n" << a << " + " << b << " = " << pc << '\n';
    }

    return 0;
}

1