大數四則運算之減法運算-----c語言版


/*
分三種情況:
1.減數長度大於被減數
交換減數與被減數,輸出負號,方便減
2.減數長度等於被減數(分三種情況)
a.減數大於被減數,類似1情況1
b.減數等於被減數,兩數相等,直接輸出0,完成。
c.減數小於被減數
3.減數長度小於被減數
*/

#include<stdio.h>
#include<string.h>
int main() {
    char ch1[1000], ch2[1000];
    int num1[1000], num2[1000], num[1000];
    int i, j, flag1 = 1, max, flag2 = 0;
    scanf("%s", ch1);
    scanf("%s", ch2);
    max = strlen(ch1);
    if (strlen(ch1)<strlen(ch2)) {//減數長度大於被減數,必定為負數
        flag1 = -1;
        max = strlen(ch2);
        printf("-");
    }
    if (strlen(ch1) == strlen(ch2))
        flag1 = 0;//確定輸入數字的長度比較結果。便於采用合理的運算方式
    for (i = 0; i<max; i++) {//初始化
        num[i] = 0;
        num1[i] = 0;
        num2[i] = 0;
    }
    for (i = strlen(ch1) - 1, j = 0; i >= 0; i--)
        num1[j++] = ch1[i] - '0';//將字符數組元素所對應數字存入整形數組
    for (i = strlen(ch2) - 1, j = 0; i >= 0; i--)
        num2[j++] = ch2[i] - '0';
    //分情況對數字進行減法運算
    if (flag1 == 1) {//第三種情況
        for (i = 0; i<strlen(ch1); i++) {
            num[i] = num1[i] - num2[i];
            if (num[i]<0) {
                num[i] += 10;
                num1[i + 1]--;
            }
        }
    }
    else if (flag1 == 0) {//第二種情況
        for (i = strlen(ch1) - 1; i <= 0; i--) {//循環結束的情況有兩種 1.ch1[i]!=ch2[i] 2.遍歷完數組中所有元素
            if (ch1[i] != ch2[i])
                break;
        }
        if (ch1[i]>ch2[i]) {//ch1[i]>ch2[i],自然相減
            for (i = 0; i<strlen(ch1); i++) {
                num[i] = num1[i] - num2[i];
                if (num[i]<0) {
                    num[i] += 10;
                    num1[i + 1]--;
                }
            }
        }
        else if (ch1[i] == ch2[i]) {//相等為0
            printf("0");
        }
        else {//輸出負號,交換減數被減數
            printf("-");
            for (i = 0; i<strlen(ch1); i++) {
                num[i] = num2[i] - num1[i];
                if (num[i]<0) {
                    num[i] += 10;
                    num2[i + 1]--;
                }
            }
        }
    }

    else {//第一種情況
        for (i = 0; i<strlen(ch2); i++) {
            num[i] = num2[i] - num1[i];
            if (num[i]<0) {
                num[i] += 10;
                num2[i + 1]--;
            }
        }
    }
    for (i = max; i >= 0; i--) {
        if (num[i] <= 0 && flag2 == 0)
            continue;
        flag2 = 1;
        printf("%d", num[i]);
    }
    return 0;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM