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

xiaoxiao2021-02-28  35

【问题描述】

编写程序实现两个超长正整数(每个最长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(); }

转载请注明原文地址: https://www.6miu.com/read-2650323.html

最新回复(0)