View Code of Problem 3689

#include<bits/stdc++.h>
using namespace std;
struct bign{
	int len;
	int d[1001];
	bign(){
		len = 0;
		memset(d,0,sizeof(d));
	}
};
void print(bign);
bign add(bign,bign);
bign change(char a[]);
bign sub(bign a,bign b);
int main(){
	bign c;
	int n;
	cin>>n;
	int flag = 0;
	for(int i = 1;i<=n;i++){
		char str1[1001],str2[1001];
		scanf("%s%s",str1,str2);
		bign a = change(str1);
		bign b = change(str2); 
	for(int i = 0;i<a.len|| i < b.len;i++){
		if(a.len > b.len) {
			flag = 1;
			break;
		}
		else if(a.len < b.len){
			flag = -1;
			break;
		}
		else {
			for(int i = a.len-1;i >= 0;i--){
				if(a.d[i]>b.d[i]) {flag = 1;break;}
				else if(a.d[i]<b.d[i]){flag = -1;break;}
			}	
		}
	}
	if(flag == -1){
		printf("Case #%d:\n",i);
		cout<<'-';
		print(sub(b,a));	
	}else{
		printf("Case #%d:\n",i);
		print(sub(a,b));
	}
	flag = 0;
	cout<<endl;
	 
	 
	 
	}
	
	
	
	
	return 0;
} 
bign change(char str[]){
	bign c;
	c.len = strlen(str);
	for(int i = 0;i<c.len;i++) c.d[i] = str[c.len-1-i]-'0';
	return c;
}

void print(bign c){
	for(int i = c.len - 1 ;i >= 0;i--)cout<<c.d[i];
}
bign sub(bign a,bign b){
	bign c;
	for(int i = 0;i < a.len||i < b.len;i++){
		if(a.d[i] < b.d[i]){
			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--;
	return c;
}


Double click to view unformatted code.


Back to problem 3689