只是实现了+,*,以及除以一个整数,其它遇到了就再补充。
struct BigData{
int s[105];
int len;
BigData(int x){
Mem(s, 0);
len = 0;
while(x){
s[len] = x % 10;
x /= 10;
len ++;
}
}
BigData(): len(0){
Mem(s, 0);
};
BigData operator / (int x){
BigData ans;
int cur = 0;
for(int i = len - 1; i >= 0; i --){
cur = cur * 10 + s[i];
if( cur < x && ans.len != 0 ){
ans.s[ans.len++] = 0;
}
if( cur >= x ){
ans.s[ans.len++] = cur / x;
cur %= x;
}
}
if( cur != 0 ){
printf("除法error\n");
}
for(int i = 0; i < ans.len / 2; i ++){
int t = ans.s[i];
ans.s[i] = ans.s[ans.len-i-1];
ans.s[ans.len-i-1] = t;
}
return ans;
}
BigData operator + ( BigData a){
BigData ans;
for(int i = 0; i < len || i < a.len; i ++){
ans.s[i] = s[i] + a.s[i];
}
for(int i = 0; i < 105; i ++){
if( ans.s[i] != 0 )
ans.len = i + 1;
ans.s[i+1] += ans.s[i] / 10;
ans.s[i] %= 10;
}
return ans;
}
BigData operator * ( BigData a){
BigData ans;
for(int i = 0; i < len; i ++){
for(int j = 0; j < a.len; j ++){
ans.s[i+j] += s[i] * a.s[j];
}
}
for(int i = 0; i < 105; i ++){
if( ans.s[i] != 0 )
ans.len = i + 1;
ans.s[i+1] += ans.s[i] / 10;
ans.s[i] %= 10;
}
return ans;
}
void operator = (BigData a){
len = a.len;
for(int i = 0; i < 105; i ++)
s[i] = a.s[i];
}
void print(){
for(int i = len - 1; i >= 0; i --){
printf("%d",s[i]);
}
if( len == 0 ){
printf("0");
}
printf("\n");
}
};