超大数减法问题
我最近在做ACM入门题,其中超大数问题是我第一个遇到的题目,为了从基本开始我挑了一个减法题,下面是我写的程序,问题是为什么输出来的值和输进去的值总隔了一行,而且我用小数减去大数,负号就在多出来的一行里,求高手指教。#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
void minus(char x[],char y[]);
char a[1000],b[1000];
gets(a);
gets(b);
minus(a,b);
printf("\n");
return 0;
}
void minus(char x[],char y[])
{
int i,j;
char z[1000],a[1000]={'\0'},b[1000]={'\0'},c[1000];
if(strlen(x)<strlen(y))
{
strcpy(c,x);
strcpy(x,y);
strcpy(y,c);
printf("-");
}
else if(strlen(x)==strlen(y))
{
if(strcmp(x,y)<0)
{
strcpy(c,x);
strcpy(x,y);
strcpy(y,c);
printf("-");
}
}
for(i=1000-strlen(x),j=0;i<1000;i++,j++)
a[i]=x[j];
for(i=1000-strlen(y),j=0;i<1000;i++,j++)
b[i]=y[j];
for(i=999;i>=999-strlen(x);i--)
{
if(b[i]=='\0')
z[i]=a[i];
else
{
z[i]=a[i]-b[i]+48;
}
if(z[i]<'0')
{
z[i]=z[i]+10;
a[i-1]--;
}
}
for(i=999-strlen(x);i<1000;i++)
printf("%c",z[i]);
}
[ 本帖最后由 空白先生 于 2012-12-16 13:11 编辑 ]