每天小练笔2-大数求和
发布时间:2020-12-14 02:29:34 所属栏目:大数据 来源:网络整理
导读:这个系列的题目都是来源于网络,然后自己写代码,可能不是最佳方法,网上有好的算法我也会给出链接。 描述: 给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B; 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前
这个系列的题目都是来源于网络,然后自己写代码,可能不是最佳方法,网上有好的算法我也会给出链接。 描述: char和int的本质都是一样的, 代码 #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;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |