C语言实现大数相乘

昨天心血来潮,想实现数组大数相乘,不写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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值