大数相乘

 

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 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;

}

            

你可能感兴趣的:(大数相乘)