昨天心血来潮,想实现数组大数相乘,不写C已经有段时间了,因为改写python了,最后发现宝刀未老啊!
想法:按照两个数相乘的方法实现。把数拆分放到数组中,进行相乘或者相加。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int get_result(int n, int arr_b[], int arr_len, int result[])
{
int k=0,j=0, num=0;
int temp1 = 0, temp2=0;
for(j=0; j<=arr_len; j++)
{
num = n * arr_b[j] + temp1;
temp1 = num / 10; //jingwei
temp2 = num % 10;
result[k] = temp2;
k++;
}
if(num >=10)
{
result[k++] = temp1;
}
return k;
}
int add_array(int sum[], int pos, int re[], int re_n)
{
int j = 0;
int temp =0, temp1=0, temp2=0;
for(j=0;j<re_n;j++)
{
temp = sum[pos] + re[j] + temp1;
temp1 = temp / 10; //jingwei
temp2 = temp % 10;
sum[pos] = temp2;
pos++;
}
if(temp>=10)//jingwei
{
sum[pos++] = temp1;
}
return pos;
}
void array_is_duicheng(int a, int b)
{
int sum[100]={0};
int i=0, j=0, k=0;
int num = 0;
int arr_a[50]={0};
int arr_b[50]={0};
int len_a =0, len_b=0;
int re[100] ={0};
while(a>=10)
{
arr_a[len_a++] = a % 10;
a = a/10;
}
arr_a[len_a] = a;
while(b>=10)
{
arr_b[len_b++] = b % 10;
b = b/10;
}
arr_b[len_b] = b;
for(i=0; i<=len_a; i++)
{
memset(re, 0, sizeof(int)*100);
j = get_result(arr_a[i], arr_b, len_b, re);
num = add_array(sum, i, re, j);
}
/* 输出数据 */
i=num-1;
while(i>=0)
{
printf("%d ", sum[i]);
i--;
}
}
int main()
{
array_is_duicheng(12345678, 87654321);
return 0;
}
输出结果为:1 0 8 2 1 5 2 0 2 2 3 7 4 6 3 8