20分,玄关,求调

P1303 A*B Problem

Liuzr20 @ 2024-10-06 20:13:00

#include<bits/stdc++.h>
using namespace std;
void bs(int ee,int xx[],string yy){
    for(int k=0;k<ee;k++){
        xx[k]=yy[k]-48;
    }
}
void jh(int aa,int bb[]){
    for(int k=0;k<aa/2;k++){
        swap(bb[k],bb[aa-1-k]); 
    }
}
int main( ){
    string a,b;
    int c[100],d[100],e[100];
    int f,g,h;
    int x,y,z;
    cin>>a>>b;
    if(a=="0"||b=="0"){
        cout<<"0";
        return 0;
    }
    f=a.length();
    g=b.length();
    if(f>g){
        h=f*2;
    }else{
        h=g*2;
    }
    for(int i=0;i<100;i++){
        c[i]=0;
        d[i]=0;
        e[i]=0;  
    }
    bs(g,c,a);
    bs(h,d,b);
    jh(g,c);
    jh(h,d);
    for(int i=0;i<g;i++){
        for(int j=0;j<f;j++){
            e[i+j]+=d[i]*c[j];
        }
    }
    for(int i=0;i<h;i++){
        e[i+1]+=e[i]/10;
        e[i]%=10;
    }
    for(h;h>-1;h--){
        if(e[h]!=0){
            h++;
            break;
        }
    }
    jh(h,e);
    for(int j=0;j<h;j++){
        cout<<e[j];
    }
    return 0;
}

by fu1013 @ 2024-10-15 21:39:47

高精度乘法模板就是这个了,最标准的

#include <bits/stdc++.h>
using namespace std;

int a[2001],b[2001],c[4002];
char a1[2001],b1[2001];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>a1>>b1;
    int i = 0;
    int la = strlen(a1);
    int lb = strlen(b1);
    for (i = 0; i < la; i++)a[la - 1 - i] = a1[i] - 48;
    for (i = 0; i < lb; i++)b[lb - 1 - i] = b1[i] - 48;
    int m = la + lb ;
    for (int i = 0; i < la; i++) {
        for (int j = 0; j < lb; j++) {
            c[i + j] += a[i] * b[j];
        }
    }
    for (int i = 0; i < m; i++) {
        c[i + 1] += c[i] / 10;
        c[i] %= 10;
    }
    while (c[m] == 0 && m >= 1)m--;
    for (i = m; i >= 0; i--){
        cout<<c[i];
    }
    return 0;
}

|