| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3279 人关注过本帖
标题:HDOJ大数加法 请大家帮我修改一下!
只看楼主 加入收藏
Ljldym
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2015-5-9
结帖率:57.14%
收藏
已结贴  问题点数:4 回复次数:2 
HDOJ大数加法 请大家帮我修改一下!
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
#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++;
    }
}
搜索更多相关主题的帖子: color 
2016-05-10 20:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:4 
输入
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',……

2016-05-11 08:30
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
随手写的,没测试过,可能有误,仅供参考
程序代码:
#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;
}

2016-05-11 08:55
快速回复:HDOJ大数加法 请大家帮我修改一下!
数据加载中...
 
   



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

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