【洛谷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;
}
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号