C语言,超长正整数的减法,我写的程序,运行时有错,请大神来帮我看看怎么改

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

#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,j;
char a[100], b[100], c[100] = { '\0' };
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++;
}
j = 98 - m;
i = 98;
if (a[i]>b[i])
{
while (i >= m)
{
if (a[i] - k >= b[i])
{
c[j] = a[i] - k - b[i] + '0';
k = 0;
i--;j--;
}
else 
{
c[j] = a[i] + 10 - k - b[i] + '0';
k = 1;
i--;j--;
}
}
}
else if (a[i]<b[i])
{printf("-");
while (i >= m)
{

if (b[i] - k >= a[i])
{
c[j] = b[i] - k - a[i] + '0';
k = 0;
i--;j--;
}
else
{
c[j] = b[i] + 10 - k - a[i] + '0';
k = 1;
i--;j--;
}
}
}

puts(c);
return 0;
}

追问

谢谢您,比刚才好多了,但是输入个别数据时还是不对,可能是在测试某些特殊的数据时错了,请您帮忙再看看,它的要求在问题补充里面,非常感谢!


温馨提示:答案为网友推荐,仅供参考
相似回答