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]);
}

以上代码仅供参考