【洛谷P1303】高精度乘法

A*B Problem

题目背景

高精度乘法模板题。

题目描述

给出两个非负整数,求它们的乘积。

输入格式

输入共两行,每行一个非负整数。

输出格式

输出一个非负整数表示乘积。

样例 #1

样例输入 #1

1 
2

样例输出 #1

2

提示

每个非负整数不超过 10^2000。

入坑OI这么久 发现还没有写过高精乘高精的题目
于是今天就来写一下啦
思路就是用小学时就学过的列竖式思想
注意一下输入输出和前导零就行
不打注释了喵

#include<bits/stdc++.h>
#define ll long long
using namespace std;
string a,b;
int k[2005],n[2005];
int num[200005];
int main(){
    cin>>a>>b;
    int l=a.length(),m=b.length();
    for(int i=1;i<=l;i++){
        k[i]=a[l-i]-'0';
    }
    for(int i=1;i<=m;i++){
        n[i]=b[m-i]-'0';
    }
    int x=l+m-1;
    for(int i=1;i<=l;i++){
        for(int j=1;j<=m;j++){
            num[i+j-1]+=k[i]*n[j];
            num[i+j]+=num[i+j-1]/10;
            num[i+j-1]%=10;
        }
    }//采用列竖式的思想
    int flag=0;
    for(int i=1;i<=l+m;i++){
        if(num[i]){
            flag=1;
            break;
        }
    }
    if(flag==0){
        cout<<0;
        system("pause");
        return 0;
    }
    if(num[x+1]>=1) x++;
    while(num[x]==0&&x>=2) --x;
    for(int i=x;i>=1;i--){
        cout<<num[i];
    } 
    system("pause");
    return 0;
}

  

posted @ 2025-01-17 22:24  elainafan  阅读(59)  评论(0)    收藏  举报