View Code of Problem 3689

#include<stdio.h>
#include<string.h>
struct bigint {
	int d[1000];
	int len;
};
bigint change(char a[]) {
	bigint c;
	c.len = 0;
	for (int i = 0; i < 1000; i++) {
		c.d[i] = 0;
	}
	for (int i = 0; i < strlen(a); i++) {
		c.d[c.len++] = a[strlen(a) - i - 1]-'0';
	}
	return c;
}
bigint sub(bigint a, bigint b) {
	bigint c;
	c.len = 0;
	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;
}
int main() {
	int t;
	scanf("%d", &t);
	for(int k=1;k<=t;k++){	
		char a[101], b[101],s[100];
		scanf("%s", a);
		scanf("%s", b);
		printf("Case #%d:\n", k);
		bigint x, y;
		x = change(a);
		y = change(b);
		int flag;
		if (strlen(a) > strlen(b)) {
			flag = 1;
		}
		else if (strlen(b) > strlen(a)) {
			flag = 0;
		}
		else {
			if (strcmp(a, b) > 0)
				flag = 1;
			else if (strcmp(a, b) < 0)
				flag = 0;
		}
		bigint c;
		if (flag) {
			c = sub(x, y);
		}
		else {
			c = sub(y, x);
			printf("-");
		}
		for (int i = c.len - 1; i >= 0; i--) {
			printf("%d", c.d[i]);
		}
		printf("\n");
	}
}

Double click to view unformatted code.


Back to problem 3689