Breve descrição de alta precisão

Recentemente, abri um blog do CSDN. Por um lado, quero aprender com os recursos do CSDN e, por outro lado, quero usar este blog para registrar o caminho.
Vamos falar sobre alta precisão: a
alta precisão também é chamada de inteiro grande, que é um número além do intervalo de dados de inteiro (int) ou mesmo (longlong). (O intervalo de int é -2147483648, o intervalo de 2147483647 / long long é -922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807)
Existe uma ideia para transformar números grandes em entrada de string.
Problema A + B (alta precisão)

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

#define ma 100000
string x,y;
int a[ma],b[ma],c[ma],la,lb,lc;
int main ()
{
    
    
    cin >>x>>y;
    la= x.length();
    lb= y.length();
    for (int i=0; i<la; i++)
        a[la-i]=x[i]-'0';
    for (int j=0; j<lb; j++)
        b[lb-j]=y[j]-'0';
    lc=max(la,lb);
    for (int k=1; k<=lc; k++)
    {
    
    
        c[k]+=a[k]+b[k];
        c[k+1]=c[k]/10;
        c[k]%=10;
    }
    if (c[lc+1]>0)
        lc++;
    for (int i=lc; i>0; i--)
        cout << c[i];
    return 0;
}

length () significa o comprimento da
string a;
int main ()
{ int n; cin >> a; // entrada asc n = a.length (); cout << n; // saída 3 return 0; } A subtração é semelhante à adição. Problema A * B







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

#define ma 100000
string x,y;
int a[ma],b[ma],c[ma],la,lb,lc;
int main ()
{
    
    
    cin >> x>>y;
    la = x.length ();
    lb = y.length ();
    for (int i=0; i<la; i++)
        a[la-i]=x[i]-'0';
    for (int i=0; i<lb; i++)
        b[lb-i]=y[i]-'0';
    lc = la+lb;
    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;
        }
    }
    while (c[lc]==0&&lc >1)lc--;
    for (int i=lc; i>0; i--)
        cout <<c[i];
    return 0;
}
       c[i+j-1]+=a[i]*b[j];

Insira a descrição da imagem aqui
Cada vez que você multiplica, você tem que ir um bit para o primeiro
c [i + j] + = c [i + j-1] / 10;
c [i + j-1]% = 10;
há um transporte, e 1 corte 10 ;

Acho que você gosta

Origin blog.csdn.net/qq_45531709/article/details/108179160
Recomendado
Clasificación