这个高精度没有使用两个char来模拟,而是用每个int保存大数的4位
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; struct BigInteger{ int num[300]; int size; BigInteger() { memset(num,0,sizeof(num)); size=0; } BigInteger(char str[]) { memset(num,0,sizeof(num)); size=0; int len=strlen(str); int j=0,w=1,tmp=0; for(int i=len-1;i>=0;i--) { tmp+=w*(str[i]-‘0‘); j++; w*=10; if(j==4||i==0) { num[size++]=tmp; tmp=j=0; w=1; } } } BigInteger operator +(const BigInteger &a)const { BigInteger res; int up=0; for(int i=0;i<size||i<a.size;i++) { int tmp=num[i]+a.num[i]+up; up=tmp/10000; tmp=tmp%10000; res.num[i]=tmp; res.size++; } if(up) res.num[res.size++]=up; return res; } void print() { for(int i=size-1;i>=0;i--) { if(i==size-1) printf("%d",num[i]); else printf("%04d",num[i]); } printf("\n"); } }; char a[1005],b[1005]; int main() { while(scanf("%s%s",a,b)!=EOF) { BigInteger Ba(a); BigInteger Bb(b); BigInteger res=Ba+Bb; res.print(); } return 0; }