您的位置:首页 > 大数据

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

2015-11-15 22:04 225 查看
大数据乘法算法步骤如下:

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;




实例代码:

#include <stdio.h>
#include <stdlib.h>

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 乘法原理