【问题描述】
编写程序实现两个超长正整数(每个最长80位数字)的减法运算。
【输入形式】
从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。
1. 第一行是超长正整数A;2. 第二行是超长正整数B;
【输出形式】
输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出。
#include<stdio.h>
#include<string.h>
void reverse(char s[])
{
int i,j;
char tmp;
for(i=0,j=strlen(s)-1;i<j;i++,j--)
{
tmp=s[i];
s[i]=s[j];
s[j]=tmp;
}
}
int main()
{
int i,k=0,m=0;
char a[100],b[100],c[100];
gets(a);
gets(b);
reverse(a);
reverse(b);
for(i=strlen(a);i<99;i++)
a[i]='0';
a[99]='\0';
for(i=strlen(b);i<99;i++)
b[i]='0';
b[99]='\0';
reverse(a);
reverse(b);
i=0;
while(a[i]==b[i])
{
i++;
m++;
}
i=98;
if(a[i]>b[i])
{
while(i>=m)
{
if(a[i]-k>=b[i])
{
c[i]=a[i]-k-b[i]+'0';
k=0;
i--;
}
else if(a[i]-k<b[i]);
{
c[i]=a[i]+10-k-b[i]+'0';
k=1;
i--;
}
}
}
else if(a[i]<b[i])
{
while(i>=m)
{
printf("-");
if(b[i]-k>=a[i])
{
c[i]=b[i]-k-a[i]+'0';
k=0;
i--;
}
else if(b[i]-k<a[i]);
{
c[i]=b[i]+10-k-a[i]+'0';
k=1;
i--;
}
}
}
c[99]='\0';
puts(c);
return 0;
}
谢谢您,比刚才好多了,但是输入个别数据时还是不对,可能是在测试某些特殊的数据时错了,请您帮忙再看看,它的要求在问题补充里面,非常感谢!