#include<bits/stdc++.h>
using namespace std;
struct bignum
{
int len;
int num[1000];
bool b1;
};
void scan(bignum &x,string s)
{
for(int i=0;i<x.len;i++)
x.num[x.len-1-i]=s[i]-'0';
}
void print(bignum c)
{
if(c.b1) printf("-");
for(int i=c.len;i>=0;i--)
printf("%d",c.num[i]);
printf("\n");
}
bignum add(bignum a,bignum b,bignum c)
{
int i;
c.len=(a.len>b.len?a.len:b.len);
for(i=0;i<c.len;i++)
{
c.num[i]+=(a.num[i]+b.num[i]);
if(c.num[i]>=10)
{
c.num[i]-=10;
c.num[i+1]++;
}
}
for(i=c.len;i && !c.num[i];i--);
c.len=i;
return c;
}
bignum mnus(bignum a,bignum b,bignum c)
{
int i,t[1000];
if(a.len!=b.len)
{
c.len=(a.len>b.len?a.len:b.len);
c.b1=(a.len>b.len?0:1);
}
else
{
c.len=a.len;
for(i=a.len-1;i>=0;i--)
if(a.num[i]!=b.num[i])
break;
c.b1=(a.num[i]>b.num[i]?0:1);
}
if(c.b1)
{
memcpy(t,a.num,sizeof(a.num));
memcpy(a.num,b.num,sizeof(b.num));
memcpy(b.num,t,sizeof(t));
}
for(i=0;i<c.len;i++)
if(a.num[i]<b.num[i])
{
a.num[i]+=10;
c.num[i]=a.num[i]-b.num[i];
a.num[i+1]--;
}
else
c.num[i]=a.num[i]-b.num[i];
for(i=c.len;i && !c.num[i];i--);
c.len=i;
return c;
}
int main()
{
string s1,s2;
bignum a,b,c;
cin>>s1>>s2;
a.len=s1.size();
b.len=s2.size();
memset(a.num,0,sizeof(a.num));
memset(b.num,0,sizeof(b.num));
scan(a,s1);
scan(b,s2);
print(add(a,b,c));
print(mnus(a,b,c));
return 0;
}
相关文章
- 12-18python datetime库使用和时间加减计算
- 12-18Opencv基础自学七(加减乘除)
- 12-18加减乘除带括号的计算器代码
- 12-18加减乘除小型计算器及nextline()一些细节
- 12-18高精度模板
- 12-18论文研读《Highly Accurate Machine Fault Diagnosis Using Deep Transfer Learning》采用深度转移学习的高精度机械故障诊断——2019
- 12-18【高精度】大整数加法
- 12-18加减乘除四则运算(链栈的应用)
- 12-18SSL集训 2021.08.25 提高B组 T3 稳定的数字【暴力】【高精度】
- 12-18Delphi中的日期加减