高精度乘高精度

发布时间 2023-04-26 21:14:10作者: Hi,小董先生

【题目描述】

  输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。

【输入】

  输入两个高精度正整数M和N。

【输出】

  求这两个高精度数的积。

【输入样例】

36
3

【输出样例】

108

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    char a[201], b[201];
    int a2[201]={}, b2[201]={}, c[402]={};
    cin >> a >> b;
    int lena = strlen(a), lenb = strlen(b);
    for(int i=0; i<=lena-1; i++)
    {
        a2[lena-i] = a[i] - '0';
    } 
    for(int i=0; i<=lenb-1; i++)
    {
        b2[lenb-i] = b[i] - '0';
    } 
    // 难点:高精度*高精度=a*b
    for(int i=1; i<=lenb; i++) // 乘数 
    {
        int jw = 0; 
        for(int j=1; j<=lena; j++) // 被乘数 
        {
            // i = 1,c[i+j-1] = 0; i=2,c[i+j-1]= 上一位的结果。 
            int t = b2[i]*a2[j] + jw + c[i+j-1];  
            jw = t/10;
            c[i+j-1] = t%10; 
        }
        // 处理每次相乘的最高位,可能是1或0。 
        c[lena+i] = jw; 
    }
    // 处理前置0
    int lenc = lena + lenb; 
    if(c[lenc]!=0) cout << c[lenc];
    for(int i=lenc-1; i>=1; i--)
    {
        cout << c[i];
    }
    return 0;
}