您的位置:首页 > 大数据 > 人工智能

大整数相乘(aijud)

2015-08-22 14:19 519 查看
#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void get_multiply(const char * str_num1,const char * str_num2)

{
int get_array_num1[15];
int get_array_num2[15];
int get_carry_bit[30] = {0};
int get_result_bit[30] = {0};
char get_outstr[30];
char *result;
char flag_num1;
char flag_num2;
int index = 0;
size_t len1 = 0;
size_t len2 = 0;
result = (char*)malloc(30);

if(str_num1 == NULL || str_num2 == NULL||(strlen(str_num1) == 0)||(strlen(str_num1) == 0))
{
return;
}

if(((*str_num1) == '0') || ((*str_num2) == '0'))
{
*result = '0';
*(result+1) = '\0';
}

if((*str_num1) == '-') 
{
flag_num1 = '-';
}
else
{
flag_num1 = '+';
}

if((*str_num2) == '-') 
{
flag_num2 = '-';
}
else
{
flag_num2 = '+';
}

if(flag_num1 == '-')
{
len1 = strlen(str_num1) - 1;
for(int i = len1; i > 0; i--)
{
get_array_num1[i - 1] = (*(str_num1+1) - '0');
str_num1++;
}
}
else
{
len1 = strlen(str_num1);
for(int i = len1; i > 0; i--)
{
get_array_num1[i - 1] = (*(str_num1) - '0');
str_num1++;
}
}

if(flag_num2 == '-')
{
len2 = strlen(str_num2) - 1;
for(int i = len2; i > 0; i--)
{
get_array_num2[i - 1] = (*(str_num2+1) - '0');
str_num2++;
}
}
else
{
len2 = strlen(str_num2);
for(int i = len2; i > 0; i--)
{
get_array_num2[i - 1] = (*(str_num2) - '0');
str_num2++;
}
}

/* 核心算法*/

    for(int i = 0; i < len2; i++)
{
for(int j = 0; j < len1; j++)
{
get_carry_bit[i+j+1] += (get_array_num2[i] * get_array_num1[j] + get_carry_bit[i+j] + get_result_bit[i+j])/10;
get_result_bit[i+j] = (get_array_num2[i] * get_array_num1[j] + get_carry_bit[i+j] + get_result_bit[i+j])%10;
get_carry_bit[i + j] = 0;
}
}
get_result_bit[len2 + len1-1] = get_carry_bit[len2 + len1-1];

for(int i = 0,j = len2+len1; j>=0; i++,j--)
{
get_outstr[i] = get_result_bit[j] + '0';
}
get_outstr[len1+len2+1] = '\0';
if(flag_num1 != flag_num2)
{
for(int i = 0; i < len1+len2+1; i++)
{
if(get_outstr[i] != '0')
{
get_outstr[i-1] = '-';
index = i-1;
break;
}

}
}
else
{
for(int i = 0; i < len1+len2+1; i++)
{
if(get_outstr[i] != '0')
{
index = i;
break;
}

}
}

for(int m = index,n=0; m <= len1+len2+1; m++,n++)
{
*(result+n) = get_outstr[m];
}

}

  

int main()

{
const char * str_num1 = "3";
const char * str_num2 = "176876876876";
get_multiply(str_num1,str_num2);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言