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