|
发表于 2023-10-26 10:11:14
|
显示全部楼层
- #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;
- }
复制代码 |
|