代码共享:
#include<stdio.h>
#define MAXSIZE 255
void init(int *p);
/*初始化数组,全部为-1*/
int input(int *p);
/*输入函数,返回1为负,0为正*/
int youyi(int n,int *p);
/*数组右移一位,高位补n,返回被移掉的一位*/
void tiaozhen(int *p);
/*将数组调整为最后一位为非-1,即为正常数*/
void jia(int *P,int *q);
/*将两个数组按位加,结果保留在a中*/
int weishu(int *P);
/*计算数组中的有效位个数*/
void tjinwei(int *P);
/*将数组各位调整为不大于10的整数*/
void chen(int *p,int *q);
/*计算两个数组的乘积,并输出结果*/
int error(int *P);
/*判断数组各位是否为0-9之间的数,正确为0,错误为1*/
void clear(int *p);
/*将数清零*/
int main()
{int a[MAXSIZE],b[MAXSIZE],f1,f2,i;
init(a);init(b);
printf("Input the first number:");
f1=input(a);
printf("Input the second number:");
f2=input(b);
printf("\n\n\tOK!\n\n");
tiaozhen(a);tiaozhen(b);
if(error(a)||error(b)) {printf("Input error!\n");exit(0);}
i=0;
while(a[i]==0) i++;
while(i<MAXSIZE) printf("%d",a[i++]);
putchar('*');
i=0;
while(b[i]==0) i++;
while(i<MAXSIZE) printf("%d",b[i++]);
printf("= ");
if(f1!=f2) putchar('-');
chen(a,b);
printf("\n\n\tEnd!\n");
getch();
return 1;
}
void init(int a[])
{int i;
for(i=0;i<MAXSIZE;i++)
a[i]=-1;
}
int input(int a[])
{char c;
int i,f=0;
i=0; c=getch();
if(c=='-') {f=1;putchar('-'); c=getch();}
while((c>='0'&&c<='9')&&c!='\n')
{a[i++]=c-'0';
putchar(c);
c=getch();
}
printf("\n");
return f;
}
int youyi(int n,int a[])
{int i,t;
t=a[MAXSIZE-1];
for(i=MAXSIZE-1;i>0;i--)
a[i]=a[i-1];
a[0]=n;
return t;
}
void tiaozhen(int a[])
{while(a[MAXSIZE-1]==-1)
youyi(0,a);
}
int error(int a[])
{int i,s=0;
for(i=0;i<MAXSIZE;i++)
if(a[i]>10||a[i]<0) break;
if(i<MAXSIZE) s=1;
return s;
}
void jia(int a[],int b[])
{int i;
for(i=0;i<MAXSIZE;i++)
a[i]=a[i]+b[i];
tjinwei(a);
}
int weishu(int a[])
{int i,cnt=0;
for(i=0;!a[i];i++)
cnt++;
cnt=MAXSIZE-cnt;
return cnt;
}
void tjinwei(int a[])
{int i;
for(i=MAXSIZE-1;i>0;i--)
{a[i-1]=a[i-1]+a[i]/10;
a[i]=a[i]%10;
}
}
void chen(int a[],int b[])
{int s[MAXSIZE],tt[MAXSIZE],i,j,l1,l2,t,d;
clear(s);
l1=weishu(a);
l2=weishu(b);
for(i=0;i<l2;i++)
{t=b[MAXSIZE-1];
clear(tt);
for(j=0;j<l1;j++)
tt[MAXSIZE-1-j]=t*a[MAXSIZE-1-j];
tjinwei(tt);
jia(s,tt);
d=youyi(0,s);
youyi(d,b);
}
i=0;
while(s[i]==0) i++;
while(i<MAXSIZE) printf("%d",s[i++]);
for(i=0;i<l2;i++) printf("%d",b[i]);
printf("\n");
}
void clear(int a[])
{int i;
for(i=0;i<MAXSIZE;i++)
a[i]=0;
}
写得不好的地方望指出!
[此贴子已经被作者于2005-4-10 18:07:28编辑过]