/C06025 - Hiệu hai số nguyên lớn

<Problem>

https://code.ptit.edu.vn/student/question/C06025
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
#include <ctype.h>

void dif(char s1[], char s2[], char s3[]) {

	int len1 = strlen(s1);
	int len2 = strlen(s2);
	int dif = abs(len1 - len2);

	int len = (len1 > len2) ? len1 : len2;
	int r = 0;
	char c;

	int len3 = 0;

	for (int i = len - 1; i >= 0; i--) {

		int a, b;

		if (len1 > len2) {
			a = s1[i] - '0';
			b = (i - dif < 0) ? 0 : s2[i - dif] - '0';
		}
		else {
			a = (i - dif < 0) ? 0 : s1[i - dif] - '0';
			b = s2[i] - '0';
		}

		int t = a - b - r;
		if (t < 0) {
			t = t + 10;
			r = 1;
		}
		else r = 0;

		c = t + '0';

		s3[len3++] = c;

	}

	if (r == 1) s3[len3++] = '1';
	s3[len3] = '\0';
}

int main() {
	int t;
	scanf("%d", &t);

	getchar();

	while (t--) {
		char s1[1000];
		char s2[1000];

		gets(s1);
		gets(s2);

		if (strlen(s1) < strlen(s2) || (strlen(s1) == strlen(s2) && strcmp(s1, s2) < 0)) {
			char tmp[1000];
			strcpy(tmp, s1);
			strcpy(s1, s2);
			strcpy(s2, tmp);
		}

		char s3[1000];

		dif(s1, s2, s3);

		int end = strlen(s3) - 1;

		if (s3[strlen(s3) - 1] == '0')
			for (int i = strlen(s3) - 1; i > 0; i--) {
				if (s3[i] == '0' && s3[i] != s3[i - 1]) {
					end = i - 1;
					break;
				}
			}

		for (int i = end; i >= 0; i--) {
			printf("%c", s3[i]);
		}
		printf("\n");
	}

	return 0;
}