用手工计算的方法即可
void mult(char *str1,char *str2,char *str3) {
int s1=strlen(str1),s2=strlen(str2);
memset(str3,'0',(s1+s2+1)*sizeof(str3[0]));
reverse_str(str1);
reverse_str(str2);
int i,j,k,t,tmp;
for(i=0;i<s1;i++) {
for(j=0;j<s2;j++) {
tmp=(str1[i]-'0')*(str2[j]-'0');
str3[i+j] +=tmp%10;
str3[i+j+1]+=tmp/10;
}
}
for(k=0;k<s1+s2-1;k++) {
if( (tmp=str3[k]-'0') > 9 ) {
str3[k]=tmp%10+'0';
str3[k+1]+=tmp/10;
}
}
if(str3[k] > '0') ++k;
str3[k]='\0';
reverse_str(str1);
reverse_str(str2);
reverse_str(str3);
}
void add(char *str1,char *str2,char *str3) {
int s1=strlen(str1),s2=strlen(str2),s3=max(s1,s2)+1;
memset(str3,'0',s3*sizeof(char));
reverse_str(str1);
reverse_str(str2);
int i,j,k=0,tmp;
for(i=0,j=0;i<s1 && j<s2;i++,j++) {
tmp=str1[i]-'0'+str2[j]-'0';
str3[k] += tmp%10;
str3[k+1] += tmp/10;
k++;
}
for(;i<s1;i++) {
tmp=str1[i]-'0';
str3[k] += tmp%10;
str3[k+1] += tmp/10;
k++;
}
for(;j<s2;j++) {
tmp=str2[j]-'0';
str3[k] += tmp%10;
str3[k+1] += tmp/10;
k++;
}
//处理字符串s3
for(i=0;i<s3;i++) {
if( (tmp=str3[i]-'0')>9 ) {
str3[i]=tmp%10+'0';
str3[i+1]+=tmp/10;
}
}
if(str3[k] > '0') k++;
str3[k]='\0';
reverse_str(str1);
reverse_str(str2);
reverse_str(str3);
}