加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

每天小练笔2-大数求和

发布时间:2020-12-14 02:29:34 所属栏目:大数据 来源:网络整理
导读:这个系列的题目都是来源于网络,然后自己写代码,可能不是最佳方法,网上有好的算法我也会给出链接。 描述: 给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B; 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前

这个系列的题目都是来源于网络,然后自己写代码,可能不是最佳方法,网上有好的算法我也会给出链接。


描述:
给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B;
题目类别: 字符串
难度: 中级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。
输出:
以字符串形式,输出一行,表示A和B的和。
样例输入:
22222222222222222222222222222222222222222222222222
22222222222222222222222222222222222222222222222222
样例输出:
33333333333333333333333333333333333333333333333333


char和int的本质都是一样的,
在ascii中,‘0’对应整数48
基本思路如下

这里写图片描述


代码

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

/* * a and b have the same length,* must a b '1' is '1'-'0',*/
void addbase(string& a,string& b,string & addsum) 
{                               
    int tmp;
    int carry=0;
    int i,absize;
    absize = a.size();
    for(i=0;i<=absize;++i)
    {
        if(i==absize)
        {
            if(carry==1)
                addsum.push_back('1');
            break;
        }

        tmp=a[i] + b[i] +carry;
        if(tmp >= 10)
        {
            carry = 1;
            tmp-=10;
            addsum.push_back(tmp+'0');
        }
        else
        {
            carry = 0;
            addsum.push_back(tmp+'0');
        }

    }

}

void turnback(string& t)
{
    int i;
    string b = t;
    for(i=0;i<t.size();++i)
    {
        t[t.size()-i-1] = b[i];
    }
}
int main(void)
{
    freopen("test.txt","r",stdin);
    int i,xsize,ysize;
    int bigsize;
    string x;
    string y;
    string sum;
    getline(cin,x);
    getline(cin,y);
    xsize=x.size();
    ysize=y.size();
    cout<<x<<endl;
    cout<<y<<endl;
    turnback(x);
    turnback(y);


    if(xsize < ysize)
    {
        for(i=0;i<ysize;++i)
        {
            y[i] -= '0';
            if(i>=xsize)
                x.push_back('0'-'0');
            else
                x[i] -='0'; 
        }
    }
    else
    {
        for(i=0;i<xsize;++i)
        {
            x[i] -= '0';
            if(i>=ysize)
                y.push_back('0'-'0');
            else
                y[i] -= '0';
        }
    }

    addbase(x,y,sum);
    turnback(sum);
    cout<<sum<<endl;
    return 0;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读