标题:大数相加
取消只看楼主
xiaodu000
Rank: 2
来 自:黑龙江七台河
等 级:论坛游民
帖 子:52
专家分:42
注 册:2013-10-15
结帖率:83.33%
已结贴  问题点数:20 回复次数:4 
大数相加
#include<iostream>
#include<string>
#include<Cstring>
using namespace std;
int main()
{
    int t;
    cin>>t;
    int num = 1;
    while(t--)
    {
        char a[1000];
        char b[1000];
        char a1[1000];
        char b1[1000];
        char c[1000];
        cin>>a>>b;
        strcpy(a1,a);
        strcpy(b1,b);
        char *s1 = a;
        char *s2 = b;
        s1 = strrev(s1);
        s2 = strrev(s2);
        int i;
        int m=0;
        int len = strlen(s1)>=strlen(s2)?strlen(s1):strlen(s2);
        for(i=0;i<len;i++)
        {
            if(*s1=='\0')  *s1 = '0';
            if(*s2=='\0')   *s2 = '0';
            cout<<*s1<<*s2<<endl;
            int k = *s1-'0'+*s2-'0'+ m;
            if(k > 9)
            {
                m = 1;
                c[i] = k - 10 + '0';
            }
            else
            {
                m = 0;
                c[i] = k + '0';
            }
            s1++;
            s2++;
        }
        if(m == 1)
        {
            c[i] = m + '0';
            c[i+1] = '\0';
        }
        else
        {
            c[i] = '\0';
        }
        cout<<"Case "<<num<<":"<<endl;
        cout<<a1<<" + "<<b1<<" = "<<strrev(&c[0])<<endl;
        memset(c,0,sizeof(c));
        num++;
    }
    return 0;
}
杭电的1002题,大数相加会出现无法识别的某位
搜索更多相关主题的帖子: include 
2014-04-29 07:36
xiaodu000
Rank: 2
来 自:黑龙江七台河
等 级:论坛游民
帖 子:52
专家分:42
注 册:2013-10-15
得分:0 
额,我现在没电脑,等我回家看看

写问题的同学不要手懒,有时候编译器说的东西胜过任何大牛!
2014-04-29 19:27
xiaodu000
Rank: 2
来 自:黑龙江七台河
等 级:论坛游民
帖 子:52
专家分:42
注 册:2013-10-15
得分:0 
回复 2 楼 wp231957
要是就输入一次的话,我测试也是好使的,但是杭电的题要求多次,就有问题了.咱们再想想吧

写问题的同学不要手懒,有时候编译器说的东西胜过任何大牛!
2014-04-30 20:28
xiaodu000
Rank: 2
来 自:黑龙江七台河
等 级:论坛游民
帖 子:52
专家分:42
注 册:2013-10-15
得分:0 
回复 5 楼 wp231957
在你那之后我又想了想,觉得先把两个大数加在一起,之后在考虑进位的问题更清晰明了,于是有了下边的代码。
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    int num = 1;
    while(t--)
    {
        char a[1000];
        char b[1000];
        char a1[1000];
        char b1[1000];
        char c[1000]={0};
        cin>>a>>b;
        strcpy(a1,a);
        strcpy(b1,b);
        char *s1 = a;
        char *s2 = b;
        s1 = strrev(s1);
        s2 = strrev(s2);
        int i;
        char *s3 = strlen(s1)>=strlen(s2)?s1:s2;
        char *s4 = strlen(s1)<strlen(s2)?s1:s2;
        for(i=0;s4[i]!='\0';i++)
        {
            s3[i] = s3[i] + s4[i] - '0';
        }
        for(i=0;s3[i]!='\0';i++)
        {
            if(s3[i] > 57)
            {
                c[i] = s3[i] - 10;
                if(s3[i+1]!='\0')    s3[i+1] += 1;
                else    s3[i+1] = '1';
            }
            else
            {
                c[i] = s3[i];
            }
        }
        cout<<"Case "<<num<<":"<<endl;
        cout<<a1<<" + "<<b1<<" = "<<strrev(&c[0])<<endl;
        if(t!=0)
        {
            cout<<endl;
        }
        memset(c,0,sizeof(c));
        num++;
    }
    return 0;
}

写问题的同学不要手懒,有时候编译器说的东西胜过任何大牛!
2014-05-14 13:22
xiaodu000
Rank: 2
来 自:黑龙江七台河
等 级:论坛游民
帖 子:52
专家分:42
注 册:2013-10-15
得分:0 
strrev()函数是PHP里面的吧,不知道为什么c++支持

写问题的同学不要手懒,有时候编译器说的东西胜过任何大牛!
2014-05-14 13:23



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




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

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