Luogu P1303 de alta precisão por alta precisão

Link do tópico: clique aqui

Significado do título: Encontre o produto de dois números, cada número não exceda 1 0 2000 10 ^ {2000}1 02 0 0 0

Idéia: Supondo que os comprimentos do multiplicador e do multiplicando são la e lb, respectivamente, o comprimento do resultado do produto final é o mais longo la + lb e o mais curto la + lb-1.

Código AC:

#include<iostream>
#include<cstring>

using namespace std;
const int N = 2010;

char A[N], B[N];
int a[N], b[N], c[N];
 
int main()
{
    
    
    cin >> A >> B;
    int la = strlen(A), lb = strlen(B);
    
    for(int i = 1; i <= la; i++)    a[i] = A[la - i] - '0';
    for(int i = 1; i <= lb; i++)    b[i] = B[lb - i] - '0';
    
    // a[i] * b[j] 的结果存放在 c[i + j - 1]
    for(int i = 1; i <= la; i++)
    {
    
    
        for(int j = 1; j <= lb; j++)
        {
    
    
            c[i + j - 1] += a[i] * b[j];
            c[i + j] += c[i + j - 1] / 10;
            c[i + j - 1] %= 10;
        }
    }
    
    int lc = la + lb;
    
    while(c[lc] == 0 && lc > 1) lc--;   // 去掉多余的前导0
    
    for(int i = lc; i >= 1; i--)    cout << c[i];
     
    return 0;
}

Acho que você gosta

Origin blog.csdn.net/qq_42815188/article/details/109231842
Recomendado
Clasificación