#include <stdio.h>
#include <string.h>
#define MAX_DIGITS 200
void subtract(char *a, char *b, char *result) {
int a_len = strlen(a);
int b_len = strlen(b);
int result_len = a_len - b_len + 1; // 计算结果长度,加1是为了保证有足够的空间存储结果
int carry = 0; // 进位标志
int i, j;
// 从低位开始相减,需要保证b的位数不高于a
for (i = 0; i < a_len || i < b_len; i++) {
int digit_a = (i < a_len) ? (a[i] - '0') : 0; // 如果a已经遍历完,则将高位补0
int digit_b = (i < b_len) ? (b[i] - '0') : 0; // 如果b已经遍历完,则将高位补0
int diff = digit_a - digit_b - carry; // 相减并考虑进位
carry = (diff < 0) ? 1 : 0; // 如果相减结果小于0,则需要向高位借位
result[i] = (diff + 10) % 10 + '0'; // 将计算结果转换为字符并存储到result中
}
// 处理最高位的进位
if (carry > 0) {
result[result_len] = carry + '0';
result_len++;
}
// 在结果后面添加一个结束符
result[result_len] = '\0';
// 将结果反转,因为从低位到高位存储时是反的
for (i = 0, j = result_len - 1; i < j; i++, j--) {
char temp = result[i];
result[i] = result[j];
result[j] = temp;
}
}
int main() {
char a[MAX_DIGITS + 1]; // 被减数a
char b[MAX_DIGITS + 1]; // 减数b
char result[MAX_DIGITS + 1]; // 结果
// 读入被减数和减数
scanf("%s %s", a, b);
// 计算差值并存储到结果中
subtract(a, b, result);
// 输出结果
printf("%s\n", result);
return 0;
}
|