大数加减法
发布时间:2020-12-14 02:22:41 所属栏目:大数据 来源:网络整理
导读:#include cstdio#include cstring#include algorithm#include cmath#include iostream#define ll long long#define esp 1e-10using namespace std;struct BigInteger{char num[10000];BigInteger(){}BigInteger(const char *s){while(*s=='0')s++;if(*s==0)s
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
#define ll long long
#define esp 1e-10
using namespace std;
struct BigInteger
{
char num[10000];
BigInteger(){}
BigInteger(const char *s)
{
while(*s=='0')
s++;
if(*s==0)
s--;
strcpy(num,s);
}
BigInteger operator + (const BigInteger rr)const
{
char sum[10000];
int ptr=9998;
memset(sum,sizeof(sum));
int lenl=strlen(num);
int lenr=strlen(rr.num);
const char *l=num;
const char *r=rr.num;
int i,j;
for(i=lenl-1,j=lenr-1;i>=0&&j>=0;i--,j--)
{
int a=l[i]-'0';
int b=r[j]-'0';
int c=a+b+sum[ptr];
if(c<10)
sum[ptr--]=c+'0';
else
{
sum[ptr-1]++;
sum[ptr--]=(c-10)+'0';
}
}
const char *sec=lenl>lenr?l:r;
int cnt=lenl>lenr?i:j;
for(int k=cnt;k>=0;k--)
{
int a=sec[k]-'0';
int c=a+sum[ptr];
if(c<10)
sum[ptr--]=c+'0';
else
{
sum[ptr-1]++;
sum[ptr--]=(c-10)+'0';
}
}
sum[ptr]==1?(sum[ptr]+='0'):(ptr++);
return BigInteger(&sum[ptr]);
}
BigInteger operator - (const BigInteger rr)const
{
if(!strcmp(num,rr.num))
return BigInteger("0");
char sum[10000];
int ptr=9998;
memset(sum,sizeof(sum));
int lenl=strlen(num);
int lenr=strlen(rr.num);
const char *l=num;
const char *r=rr.num;
bool isNegative=false;
if(lenl<lenr||(lenl==lenr&&strcmp(num,rr.num)<0))
{
swap(lenl,lenr);
swap(l,r);
isNegative=true;
}
int i,j--)
{
int a=l[i]-'0';
int b=r[j]-'0';
int c=a-b+sum[ptr];
if(c>=0)
sum[ptr--]=c+'0';
else
{
sum[ptr-1]--;
sum[ptr--]=(c+10)+'0';
}
}
const char *sec=l;
for(int k=i;k>=0;k--)
{
int a=sec[k]-'0';
int c=a+sum[ptr];
if(c>=0)
sum[ptr--]=c+'0';
else
{
sum[ptr-1]--;
sum[ptr--]=(c+10)+'0';
}
}
while(sum[++ptr]=='0');
//sum[ptr+1]=='0'?ptr+=2:(ptr++);
if(isNegative)
sum[--ptr]='-';
return BigInteger(&sum[ptr]);
}
};
char s1[1000],s2[1000];
int main()
{
//freopen("lalala.text","r",stdin) ;
while(~scanf("%s %s",s1,s2))
{
BigInteger a(s1);
BigInteger b(s2);
printf("%sn",(a-b).num);
}
return 0;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
