记录编号 |
474822 |
评测结果 |
AAAAAA |
题目名称 |
增强的减法问题 |
最终得分 |
100 |
用户昵称 |
Shirry |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.090 s |
提交时间 |
2017-11-10 22:28:02 |
内存使用 |
0.11 MiB |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define inf (int)1e9
using namespace std;
const int maxn=10010;
const int base=10;
struct big{
int a[1000],s;
big(){memset(a,0,sizeof(a)),s=0;}
big(int x){a[1]=x,s=1;}
}a,b;
big operator + (const big&a,const big&b){
big c;
c.s=a.s;
int g=0;
for(int i=1;i<=a.s;i++){
c.a[i]=a.a[i]+b.a[i]+g;
g=c.a[i]/base;
c.a[i]%=base;
}
while(g)c.a[++c.s]=g%base,g/=base;
return c;
}
big operator - (const big&a,const big&b){
big c=a;
for(int i=b.s;i>0;i--){
c.a[i]=a.a[i]-b.a[i];
if(c.a[i]<0)c.a[i]+=base,c.a[i+1]--;
}
for(int i=1;i<=c.s;i++){
if(c.a[i]<0)c.a[i]+=base,c.a[i+1]--;
}
while(c.s>1&&!c.a[c.s])c.s--;
return c;
}
big operator * (const big&a,int b){
big c;
c.s=a.s;
int g=0;
for(int i=1;i<=a.s;i++){
c.a[i]=a.a[i]*b+g;
g=c.a[i]/base;
c.a[i]%=base;
}
while(g)c.a[++c.s]=g%base,g/=base;
return c;
}
big operator / (const big&a,int b){
big c=a;
int g=0;
for(int i=c.s;i>0;i--){
g=g*base+c.a[i];
c.a[i]=g/b;
g%=b;
}
while(c.s>1&&!c.a[c.s])c.s--;
return c;
}
bool operator < (const big&a,const big&b){
if(a.s<b.s)return true;
else if(a.s>b.s)return false;
else{
for(int i=a.s;i>0;i--){
if(a.a[i]<b.a[i])return true;
if(a.a[i]>b.a[i])return false;
}
}
return false;
}
int main(){
freopen("sub.in","r",stdin);
freopen("sub.out","w",stdout);
char c[100],d[100];
cin>>c>>d;
for(int i=strlen(c)-1;i>=0;i--)a.a[++a.s]=c[i]-'0';
for(int i=strlen(d)-1;i>=0;i--)b.a[++b.s]=d[i]-'0';
big ans;
if(a<b)ans=b-a,printf("-");
else ans=a-b;
printf("%d",ans.a[ans.s]);
for(int i=ans.s-1;i>=1;i--)printf("%d",ans.a[i]);
return 0;
}