我那样写其实也有点好处的,不用考虑太多,交给一个函数去完成就行了。我怕函数写得太长自己都糊涂了……
#include<stdio.h> #include<string.h> #include<malloc.h>
void strtoi(char *q,int a[]) {int i; for(i=0;i<strlen(q);i++) a[i]=q[i]-'0'; }
int youyi(int n,int a[],int L) {int i,t; t=a[L-1]; for(i=L-1;i>0;i--) a[i]=a[i-1]; a[0]=n; return t; }
void clear(int a[],int L) {int i; for(i=0;i<L;i++) a[i]=0; }
void tjinwei(int a[],int L) {int i; for(i=L-1;i>0;i--) {a[i-1]=a[i-1]+a[i]/10; a[i]=a[i]%10; } }
void jia(int a[],int b[],int L) {int i; for(i=0;i<L;i++) a[i]=a[i]+b[i]; tjinwei(a,L); }
char * chen(char *p,char *q) {int l1,l2,*s,*p1,*q1,*t,i,j,k,L,d; char *str; l1=strlen(p); l2=strlen(q); L=l1+l2+2; s=(int *)malloc(L*sizeof(int)); q1=(int *)malloc(l2*sizeof(int)); p1=(int *)malloc(l1*sizeof(int)); strtoi(p,p1); strtoi(q,q1); clear(s,L); t=(int *)malloc(L*sizeof(int)); for(i=0;i<l2;i++) {k=q1[l2-1]; clear(t,L); for(j=0;j<l1;j++) t[L-1-j]=k*p1[l1-1-j]; tjinwei(t,L); jia(s,t,L); d=youyi(0,s,L); youyi(d,q1,l2); } str=(char *)malloc((L+l2)*sizeof(char)); i=0;j=0; while(s[i]==0) i++; while(i<L) str[j++]=s[i++]+'0'; for(i=0;i<l2;i++) str[j++]=q1[i]+'0'; str[j]='\0'; free(s); free(q1); free(p1); return str; }
void main() {char a[100],b[100]; scanf("%s%s",a,b); printf("%s\n",chen(a,b)); getch(); }
[此贴子已经被作者于2005-4-11 17:45:37编辑过]
[此贴子已经被作者于2005-4-13 15:49:29编辑过]