程序设计大作业---超长正整数的减法


  1. 【问题描述】

编写程序实现两个超长正整数(每个最长80位数字)的减法运算。

【输入形式】

从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。
1. 第一行是超长正整数A;
2. 第二行是超长正整数B;

【输出形式】

输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求:
1、若结果大于0,则只输出结果数字,不输出正号;若结果为负,则输出负号;若结果为0,则只输出一个0。
2、除非结果为0,否则输出的结果的最高位不能为0,并且各位数字紧密输出。

【输入样例】

234098
134098703578230056

【输出样例】

-134098703577995958

【样例说明】

进行两个正整数减法运算, 234098 - 134098703578230056 = -134098703577995958。

#include<stdio.h>
#include<string.h>
int c[100];

int judge(char a[], char b[])
{
    int i;
    if (strlen(a) < strlen(b)) {
        return 0;
    }
    else if (strlen(a) > strlen(b)) {
        return 1;
    }

    for (i = 0; i < strlen(a); i++) {
        if (a[i] < b[i]) {
            return 0;
        }
    }
    return 1;
}
void minus(char a[], char b[], int k1, int k2)
{
    int i, j;
    char k;
    for (i = 0; i<k1; i++, k1--)
    {
        k = a[i];
        a[i] = a[k1];
        a[k1] = k;
    }
    for (i = 0; i<k2; i++, k2--)
    {
        k = b[i]; b[i] = b[k2]; b[k2] = k;
    }
    for (i = 0; i<strlen(a); i++)
    {
        if (i >= strlen(b)) {
            c[i] = a[i] - '0';
        }
        else {
            c[i] = a[i] - b[i];
        }
    }
    for (i = 0; i<strlen(a); i++)
        while (c[i]<0) {
            c[i] += 10;
            c[i + 1] -= 1;
        }
}
int main()
{
    int i, j, k1, k2;
    char a[100], b[100];
    gets(a);
    gets(b);
    k1 = strlen(a) - 1;
    k2 = strlen(b) - 1;
    if (judge(a, b)) {
        minus(a, b, k1, k2);
    }
    else {
        printf("-");
        minus(b, a, k2, k1);
    }
    i = 100;
    while (c[i] == 0 && i != 0) {
        i--;
    }
    for (j = i; j >= 0; j--) {
        printf("%d", c[j]);
    }

    getchar(); getchar();
}

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zkd758/article/details/80633870