大数乘法

主要要会使用一个规律: 即一个数的第i 位和另一个数的第j 位相乘所得的数,一定是要累加到结果的第i+j 位上,即a[i+j] = a[i] * a[j]

#include<cstring>
using namespace std;
#define maxn 1000
void multiplication(char num1[], char num2[])
{
    int a[maxn] = {0}, b[maxn] = {0};
    int ans[maxn*2 + 10] = {0};
    int len1 = strlen(num1), len2 = strlen(num2);

    for(int i = 0,j = len1 - 1; j >= 0; j--)
        a[i++] = num1[j] - '0';
    for(int i = 0,j = len2 - 1; j >= 0; j--)
        b[i++] = num2[j] - '0';

    for(int i = 0; i < len1; i++)
    for(int j = 0; j < len2; j++)
        ans[i + j] += a[i] * b[j];

    for(int i = 0; i <= maxn * 2; i++)
    {//进位
        if(ans[i] >= 10)
        {   
            ans[i+1] += ans[i] / 10;
            ans[i] %= 10;
        }
        if(ans[i + 1] < 10 && (i + 1) > strlen(num1) + strlen(num2))break;
    }
    int j;
    for(j = maxn * 2; ans[j] == 0 && j >= 0; j--);//去除前导0
    if(j >= 0)
    for(int i = j; j >= 0; j--)
        cout<<ans[j];
    else 
        cout<<0;
    cout<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值