c++処理高精度数テンプレート

1419 ワード

#include 
using namespace std;
struct bign{
	int d[1000];
	int len;
	bign(){
		memset(d,0,sizeof(d));
		len=0;
	}
};
//    ,              ,            
//       
bign change(char str[]){
	bign a;
	a.len=strlen(str);
	for(int i=0;ib.len)return 1;//a  b
	else if(a.len=0;i++){
			if(a.d[i]>b.d[i])return 1;
			else if(a.d[i]0){

			a.d[i+1]--;
			a.d[i]+=10;
		}
		}
		c.d[c.len++]=a.d[i]-b.d[i];
	}
	while(c.len-1>=1&&c.d[c.len-1]==0){
		c.len--;
	}//     0 !         
	return c;
}
//          
bign multi(bign a,int b){
	bign c;
	int carry=0;
	for(int i=0;i=0;i--){
		r=r*10+a.d[i];
		if(r=1&&c.d[c.len-1]==0){
		c.len--;
	}
	return c;
}
void print(bign a){
	for(int i=a.len-1;i>=0;i--)
		printf("%d",a.d[i]);
}
int main(){
	char str1[1000],str2[1000];
	scanf("%s%s",str1,str2);
	bign a=change(str1);
	bign b=change(str2);
	print(add(a,b));
	return 0;
}