| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 669 人关注过本帖
标题:大数相加
只看楼主 加入收藏
xiaodu000
Rank: 2
来 自:黑龙江七台河
等 级:论坛游民
帖 子:52
专家分:42
注 册:2013-10-15
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:6 
大数相加
#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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
翻转字符串  挺好玩的
我给你的代码最外层的循环给脱掉了,测试了几组数据  没发现哪里错误呢

程序代码:
#include<iostream>
#include<string>
#include<Cstring>

using namespace std;

int main()
{
    char a[1000] ={'\0'};
    char b[1000] ={'\0'};
    char a1[1000]={'\0'};
    char b1[1000]={'\0'};
    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;
    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';
        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<<a1<<" + "<<b1<<" = "<<strrev(&c[0])<<endl;
    
    return 0;
}

DO IT YOURSELF !
2014-04-29 13:38
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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include<iostream>
#include<string>
#include<Cstring>

using namespace std;

int main()
{
    char a[1000] ={'\0'};
    char b[1000] ={'\0'};
    char a1[1000]={'\0'};
    char b1[1000]={'\0'};
    char c[1000] ={'\0'};
    while(1)    //为了简单起见  这里设置了死循环,请使用CTRL+C退出程序
    {
        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';
            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<<a1<<" + "<<b1<<" = "<<strrev(&c[0])<<endl;
        memset(a,'\0',sizeof(a));    //清一下缓存试试
        memset(b,'\0',sizeof(b));
        memset(c,'\0',sizeof(c));

    }
    return 0;
}

DO IT YOURSELF !
2014-05-01 09:03
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
快速回复:大数相加
数据加载中...
 
   



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

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