char
*
mutiply(
const
char
*
num1,
const
char
*
num2)
... {
int len1 = strlen(num1);
int len2 = strlen(num2);
static char result[MAX_NUM*2];
memset(result,'0',MAX_NUM*2);
char mid[2]=...{0,0};//保存两个个位数相乘的结果,mid[0]存放十位数,mid[1]存放个位数
int sign=0; //进位
int sign2=0; //进位
for (int j=1;j<=len2;j++)
...{
for (int i=1;i<=len1;i++)
...{
int tmp = (num1[len1-i]-'0')*(num2[len2-j]-'0');
mid[1]=tmp%10;
mid[0]=(int)tmp/10;
... {
int len1 = strlen(num1);
int len2 = strlen(num2);
static char result[MAX_NUM*2];
memset(result,'0',MAX_NUM*2);
char mid[2]=...{0,0};//保存两个个位数相乘的结果,mid[0]存放十位数,mid[1]存放个位数
int sign=0; //进位
int sign2=0; //进位
for (int j=1;j<=len2;j++)
...{
for (int i=1;i<=len1;i++)
...{
int tmp = (num1[len1-i]-'0')*(num2[len2-j]-'0');
mid[1]=tmp%10;
mid[0]=(int)tmp/10;
int pos = MAX_NUM*2 - 1 - ( (i-1) +(j-1) );
sign = int (((result[pos ] + mid[ 1 ]) - ' 0 ' ) / 10 ); //求个位相加进位,有则为1,无则为0
result[pos ] = ' 0 ' + (result[pos ] + mid[ 1 ] - ' 0 ' ) % 10 ; //把个位数加到结果去
sign2
=
(
int
)((result[pos - 1
]
+
sign
+
mid[
0
]
-
'
0
'
)
/
10
); //求十位相加进位,有则为1,无则为0
result[pos - 1 ] = ' 0 ' + (result[pos - 1 ] + sign + mid[ 0 ] - ' 0 ' ) % 10 ; //把十位数加到结果去
//依次检查进位,直到没有进位为止
for ( int k = 1 ;sign2;k ++ )
... {
sign =(int) ((result[pos - 1 - k]+sign2-'0')/10);
result[pos - 1 - k] = '0'+(result[pos - 1 - k]+sign2-'0')%10;
sign2 = sign;
}
}
}
int i = 0 ;
for (;result[i] == ' 0 ' ;i ++ )
;
return result + i;
}
for ( int k = 1 ;sign2;k ++ )
... {
sign =(int) ((result[pos - 1 - k]+sign2-'0')/10);
result[pos - 1 - k] = '0'+(result[pos - 1 - k]+sign2-'0')%10;
sign2 = sign;
}
}
}
int i = 0 ;
for (;result[i] == ' 0 ' ;i ++ )
;
return result + i;
}