首页 > 其他分享 >高精度乘法(A*B problem)

高精度乘法(A*B problem)

时间:2022-10-15 02:11:05浏览次数:42  
标签:10005 lena 高精度 int multi cnt problem 乘法

/* A*B problem 高精度 */
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    char a[10005],b[10005];
    int numa[10005],numb[10005];
    int multi[30005];
    int lena,lenb;
    cin>>a>>b;
    lena=strlen(a);
    lenb=strlen(b);
    if(lena==1&&a[0]=='0')
    {
        cout<<"0";
        return 0;
    }
    if(lenb==1&&b[0]=='0')
    {
        cout<<"0";
        return 0;
    }
    memset(multi,0,sizeof(multi));
    for(int i=0;i<=lena-1;i++){ numa[lena-i-1]=a[i]-'0'; }
    for(int i=0;i<=lenb-1;i++){ numb[lenb-i-1]=b[i]-'0'; }
    for(int i=0;i<=lena-1;i++)
    for(int j=0;j<=lenb-1;j++)
    {
        multi[i+j]+=numa[i]*numb[j];
    }
    for(int i=0;i<=lena+lenb-1;i++)
    {
        while(multi[i]>=10)
        {
            multi[i]-=10;
            multi[i+1]++;
        }
    }
    int cnt=lena+lenb-1;
    while(multi[--cnt]!=0) break;
    for(int i=cnt;i>=0;i--) cout<<multi[i];
    
    return 0;
}

高精度乘法的思路与加法减法一样,也是按照列竖式的方法,简单的找规律后我们便能发现第i位与第j位的乘积应该加在结果的第i+j位(i与j都从0开始计数),注意与加法不同的地方在于,每一个位置不能仅仅用赋值来处理,应该用递增,因为对于一个tot,有多组i,j满足i+j=tot。用这样的思路便可写出能实现功能的代码。

标签:10005,lena,高精度,int,multi,cnt,problem,乘法
From: https://www.cnblogs.com/KeviNieZenith/p/16793452.html

相关文章