Suma de enteros grandes

[Descripción del problema] Sumando enteros grandes
Cuando se programa en un lenguaje de programación, es posible procesar enteros muy grandes o que requieren una precisión aritmética muy alta (llamados enteros grandes) .Estos enteros grandes usan los datos básicos del lenguaje El tipo no se puede expresar directamente. El método general de tratar con enteros grandes es usar matrices para almacenar enteros grandes, es decir, para abrir una matriz de enteros relativamente grande, los elementos de la matriz representan un bit del entero grande y simulan la operación de enteros grandes a través de la operación de los elementos de la matriz.
Dado un número entero grande, encuentre C = A + B. Puede usar dos tablas de secuencia A y B para almacenar dos enteros grandes, y la tabla de secuencia C para almacenar los resultados de la suma. Para facilitar la operación de suma, los bits más bajos del número entero grande pueden almacenarse en el extremo inferior de la tabla de secuencia, y la longitud de la tabla de secuencia indica el número de bits del número entero grande.
[Formulario de entrada] Dos dígitos enteros grandes.
[Forma de salida] El resultado de la suma C se emite en orden de mayor a menor.
[Entrada de muestra]
987654321
99997531
[Salida de muestra]
1087651852
[Explicación] Si ingresa un entero grande desde el teclado, generalmente se almacena en una matriz de caracteres, por lo que no necesita ingresar el entero grande en segmentos. Por supuesto, necesita convertir los caracteres a la matriz de caracteres Números

#include <iostream>
#include <cstdio>
using namespace std;
int ma (int a,int b)
{
    if(a>b)
        return a;
    else
        return b;
}
int mi (int a,int b)
{
    if(a<b)
        return a;
    else
        return b;
}
int main()
{
    char s1[100],s2[100];
    int i,j,n1=0,n2=0,m1,m2;
    scanf("%s",s1);
    scanf("%s",s2);
    for(i=0;s1[i];i++)
    {
        n1++;
    }
    for(i=0;s2[i];i++)
    {
        n2++;
    }
    int a1[n1],a2[n2];
    for(i=0;i<n1;i++)
    {
        a1[i]=s1[i]-'0';
    }
    for(i=0;i<n2;i++)
    {
        a2[i]=s2[i]-'0';
    }
    m2=ma(n1,n2);
    m1=mi(n1,n2);
    int b[m2],n=0;
    for(i=0;i<m2;i++)
    {
        n1--;
        n2--;
        if(n1>-1&&n2>-1)
        {
            b[i]=a1[n1]+a2[n2]+n;
            if(b[i]>=10&&i!=m2-1)
            {
                n=b[i]/10;
                b[i]=b[i]%10;
            }
            else if(b[i]<10&&i!=m2-1)
                n=0;
            else if(i==m2-1)
            {
                b[i]=b[i];
            }
        }
        else if(n1<=-1&&n2>-1)
        {
            b[i]=a2[n2]+n;
            if(b[i]>=10&&i!=m2-1)
            {
                n=b[i]/10;
                b[i]=b[i]%10;
            }
            else if(b[i]<10&&i!=m2-1)
                n=0;
            else if(i==m2-1)
                b[i]=b[i];
        }
        else if(n2<=-1&&n1>-1)
        {
            b[i]=a1[n1]+n;
            if(b[i]>=10&&i!=m2-1)
            {
                n=b[i]/10;
                b[i]=b[i]%10;
            }
            else if(b[i]<10&&i!=m2-1)
                n=0;
            else if(i==m2-1)
                b[i]=b[i];
        }

    }
    for(i=m2-1;i>=0;i--)
    {
        cout<<b[i];
    }
    return 0;




}

Publicado 31 artículos originales · elogiado 8 · visitas 2157

Supongo que te gusta

Origin blog.csdn.net/weixin_44034024/article/details/104660735
Recomendado
Clasificación