1.正负号处理
int flaga=1; if(s1[0]=='-'){ flaga=0; strcpy(s1,&s1[1]); } if((flaga&&!flagb)||(!flaga&&flagb)) putchar('-');
2.最不利原则
int len=lena+lenb;
3.进位处理
c[i+j]=a[i]*b[j]+jw+c[i+j]; jw=c[i+j]/10; c[i+j]%=10;
源码
#include <stdio.h> #include <string.h> #define Max 3000 void multiply(char s1[],char s2[]); int main() { char s1[Max]; char s2[Max]; scanf("%s %s",s1,s2); multiply(s1,s2); } void multiply(char s1[],char s2[]){ int flaga=1; if(s1[0]=='-'){ flaga=0; strcpy(s1,&s1[1]); } int flagb=1; if(s2[0]=='-'){ flagb=0; strcpy(s2,&s2[1]); } int a[Max]; int b[Max]; int c[Max]={0}; int lena=strlen(s1); for(int i;i<lena;i++) a[i]=s1[lena-i-1]-'0'; int lenb=strlen(s2); for(int i;i<lenb;i++) b[i]=s2[lenb-i-1]-'0'; int len=lena+lenb; for(int i=0;i<lena;i++){ int jw=0; for(int j=0;j<lenb;j++){ c[i+j]=a[i]*b[j]+jw+c[i+j]; jw=c[i+j]/10; c[i+j]%=10; } c[lenb+i]=jw; } if((flaga&&!flagb)||(!flaga&&flagb)) putchar('-'); for(int i=len-1;i>=0;i--){ if(c[i]==0&&len>1) len--; else break; } for(int i=len-1;i>=0;i--) printf("%d",c[i]); }
以上代码仅供参考