大整数的减法运算(c语言)

#c语言
#问题描述
输入两个整数实现整数减法A-B
要求:分三种情况:
1.减数长度大于被减数
交换减数与被减数,输出负号,方便减
2.减数长度等于被减数(分三种情况)
a.减数大于被减数,类似1情况1
b.减数等于被减数,两数相等,直接输出0,完成。
c.减数小于被减数
3.减数长度小于被减数

#Input Description
输入两个整数

#Output Description
输出结果
Sample Input
55678899000 34556778
Sample Output
55644342222
求球求

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
下面是代码实现:

#include <stdio.h>
#include <string.h>

#define N 1000

int cmp(char str1[], char str2[]) { //比较两个字符串的大小
    int len1 = strlen(str1);
    int len2 = strlen(str2);

    if(len1 > len2) return 1;
    else if(len1 < len2) return -1;
    else {
        int i;
        for(i = 0; i < len1; i++) {
            if(str1[i] > str2[i]) return 1;
            else if(str1[i] < str2[i]) return -1;
        }
        return 0; //两个字符串相等
    }
}

void swap(char str1[], char str2[]) { //交换两个字符串
    char tmp[N];
    strncpy(tmp, str1, N);
    strncpy(str1, str2, N);
    strncpy(str2, tmp, N);
}

void sub(char str1[], char str2[]) { //两个字符串相减
    char res[N];
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    int borrow = 0; //进位

    int i;
    for(i = 0; i < len1; i++) {
        int a = str1[len1 - i - 1] - '0';
        int b = i < len2 ? str2[len2 - i - 1] - '0' : 0;
        int tmp = a - b - borrow;

        if(tmp < 0) {
            tmp += 10;
            borrow = 1;
        } else {
            borrow = 0;
        }

        res[len1 - i - 1] = tmp + '0';
    }

    printf("%s\n", res);
}

int main() {
    char str1[N], str2[N];
    scanf("%s %s", str1, str2);

    int flag = cmp(str1, str2);

    if(flag < 0) { //当减数长度小于被减数,交换两个字符串
        printf("-");
        swap(str1, str2);
    } else if(flag == 0) { //当两个字符串相等,输出0
        printf("0\n");
        return 0;
    }

    sub(str1, str2);

    return 0;
}

思路说明:

1.先比较两个整数的大小,如果减数长度小于被减数,交换两个字符串,并输出负号。

2.如果两个整数相等,直接输出0。

3.对两个字符串进行相减,然后输出结果。

在相减时,我们可以从低位到高位遍历字符串,分别将它们对应的数字相减并减去上一位的借位,然后将结果存储在一个字符数组中,以便输出。需要注意的是,如果对应的数字小于上一位的借位,则需要向上一位借位,同时减数需要加上一个10来进行计算。

例如:

55678899000 - 34556778

先比较两个数字的大小,可知减数长度大于被减数,需将两个数字交换并输出负号:

34556778 - 55678899000

从低位到高位遍历字符串,相减得到结果:

8 - 0 = 8
7 - 0 = 7
7 - 9 - 1 = -3,需要向前一位借位
6 - 8 - 1 = -3,需要向前一位借位
5 - 7 - 1 = -3,需要向前一位借位
5 - 6 - 1 = -2,需要向前一位借位
4 - 5 - 1 = -2,需要向前一位借位
3 - 5 - 1 = -3,需要向前一位借位
5 - 5 - 0 = 0
5 - 3 - 0 = 2
6 - 4 - 0 = 2
5 - 3 - 0 = 2

最终结果为:

-55644342222
如果我的回答解决了您的问题,请采纳!