大数据的乘法的原理和实现

大数据乘法算法步骤如下:

1. 计算被乘数各个位上与乘数各个为的积,按位错开。如下面:先计算被乘数的个位(5*9 = 45,4*9 = 36……1*9 = 9),然后错开一位,计算被乘数的十位(1*5 = 5,……1*1=1)。
2. 把各位的加起来(将个位和十位计算的乘积按位相加,如45+0 = 45,36+5 = 41,……,1+0 = 1)
3. 十位进位,取个位,如 (45对10取模等于4,所以进向41进4,45对10取余等于5,所以留下5,其他以此类推)
4. 最后得出 12345*19 = 234555;

大数据的乘法的原理和实现_第1张图片

实例代码:



#include 
#include 


void getbigdata (char *dataa , char *datab )
{
             int lengtha = strlen( dataa);          //计算数组长度
             int lengthb = strlen( datab);         
             int * pres = ( int *) malloc( sizeof( int)*( lengtha + lengthb));                         //用于储存中间变量
             memset( pres, 0, sizeof( int)*( lengtha + lengthb));             //对指针所指的内存空间进行初始化,赋值为0

             for ( int i = 0; i < lengtha; i++)
            {
                         for ( int j = 0; j < lengthb; j++)
                        {
                                     //将字符转化成整形进行乘法运算,完成乘数和被乘数的按位相乘,并且相加,并把结果储存在pres中
                                     pres[ i+ j+1] += ( dataa[ i] - '0')*( datab[ j] - '0');   
                        }
            }
             for ( int i = lengtha + lengthb - 1; i >= 0; i--)                    //进行进位,取余运算
            {
                         if ( pres[ i]>=10)
                        {
                                     pres[ i - 1] += pres[ i] / 10;                      //进位
                                     pres[ i] %= 10;               //去除个位数
                        }
            }
             int i = 0;            
             //刚刚对pres指向的内存全部初始化成了0,所以这里是将0去除
             while ( pres[ i] == 0)       
            {
                         i++;
            }
             //将结果转存在lastres数组中
             char * lastres = malloc( sizeof( char)*( lengtha + lengthb));
             int j;
             for ( j = 0; j < lengtha + lengthb; j++, i++)
            {
                         lastres[ j] = pres[ i] + '0';
            }
             lastres[ j] = '\0';              //数组最后都带有一个\0结尾
             printf( "last结果 = %s\n" , lastres );
}

void main ()
{
             char str1[100] = { 0 };
             char str2[100] = { 0 };
             scanf( "%s%s" , str1 , str2 );
             printf( "str1 = %s,str2 = %s" , str1 , str2 );
             getbigdata( str1, str2);

             system( "pause" );
}

你可能感兴趣的:(C语言)