大数加减法
发布时间: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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |