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

大数加减法

发布时间: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;
}

(编辑:李大同)

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

    推荐文章
      热点阅读