/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;
}