Implementado en C ++: sumador de alta precisión

Descripción del problema
  De entrada dos enteros una y B , y salidas de los dos números enteros. una y b no son más de 100.
Descripción del algoritmo
  Desde un y b son grandes, no se puede utilizar directamente en los tipos de datos estándar del lenguaje almacenado. Para este problema, generalmente utilizar una matriz de manejar.
  Definir una matriz A , A [0] para almacenar un bit XX, A [. 1] para almacenar un diez, y así sucesivamente. También puede utilizar una matriz B para el almacenamiento B .
  Calculado C = A + B cuando la primera A [0] y B [0] se añaden, si hay carry, carry put (es decir, las decenas y) en R & lt , y la existencia de la sola dígitos el C [0], es decir, C [0] es igual a ( a [0] + B [0]) 10%. Calcula entonces A [. 1] y B [1] se añaden, a continuación, la alimentación también debe ser bajo valor de hasta r también combinarse, es decir, C [1] debe ser A [1], B [1] y r tres y el número. Si no llevan generación, todavía pueden ser almacenados para llevar a la nueva r , los bits almacenados y para el C [. 1] en. Y así sucesivamente, se puede encontrar C todos los bits.
  Por último, el C de salida puede ser.
Formato de entrada
  La entrada consiste en dos líneas, una primera conducta un número entero no negativo A , un segundo no negativo comportamiento número entero B . Dos enteros no más de 100, el número más alto de dos bits no es cero.
Formato de salida
  línea de salida, representa A + B valores.
entrada de la muestra
20100122201001221234567890
2010012220100122
Ejemplo de salida
20100122203011233454668012
 
Ideas: cadena de entrada primera matriz, entonces la cadena en matriz de enteros, con cada matriz del sumador analógico.
 
. 1 #include <la iostream>
 2 #include <CString>
 . 3  el uso de  espacio de nombres STD;
 . 4  int principal ( void )
 5.  {
 6.      Cadena str1; // de entrada dos cadenas 
7.      Cadena str2;
 . 8      // tamaño de la matriz determina la exactitud de tamaño 
9.      Int ARR = * nuevo nuevo  int [ 101 ] { 0 };
 10      int * BRR = new new  int [ 101 ] { 0 };
 . 11      CIN >> >> str1str2;
 12 es      int LEN1 str1.length = ();   // obtener la primera longitud de la cadena 
13 es      int Len2 str2.length = ();   // obtener la segunda longitud de la cadena 
14      int len;
 15      para ( int I = 0 ; I <LEN1; I ++)     // la primera cadena para convertir cada número entero de bits, almacenado en una matriz de arr 
16      {
 . 17          arr [I] = str1 [LEN1 - I - . 1 ] - ' 0 ' ;       // Guardar 1 no debe perderse, porque la longitud LEN1, dará lugar a una matriz disminuida grada 
18      }                                            // Causas Guardar revés se pone en la cadena de bits convierte en una primera matriz de enteros posiciones
. 19      para ( int I = 0 ; I <Len2; I ++)     // la segunda cadena de cada convertir en un entero, se almacenan en un array BRR 
20 es      {
 21 es          BRR [I] = str2 [Len2 - I - . 1 ] - ' 0 ' ;
 22 es      }
 23 se      len = (LEN1> len2 LEN1 :? len2);      // lograr longitud máxima de cadena de 
24      para ( int I = 0 ; I <len; I ++)           // analógico sumador 
25      {
 26 es          ARR [I] = ARR [I] + BRR [I];
 27          ARR [I + . 1] = ARR [I + 1. ] + ARR [I] / 10 ;
 28          ARR [I] = ARR [I]% 10 ;
 29      }
 30      al mismo tiempo ((ARR [len] == 0 ) && (LEN> 0 ))   // a 0 para eliminar el exceso de matriz 
31 es      {
 32          len-- ;
 33 es      }
 34 es      para ( int I = len; I> = 0 ; i--)          // salida inversa 
35      {
 36          COUT << ARR [I];
 37 [      }
 38 es      de retorno  0;
39 }

nota:

           (1): Conjunto el tiempo, sino también a una matriz de matrices cada se inicializan a 0, o cuando la adición analógica de problemas de espalda, ya que no tendrá que se produce o ilegible el error array de inicialización. 

           (2): De acuerdo con objeto de determinar razonablemente el tamaño de la matriz, no demasiado pequeño ni demasiado grande

           (3): Como la inicialización matriz de enteros es muy inconveniente, y es difícil de hacer que a medida que la cadena de entrada, por lo que de acuerdo con la primera entrada de cadena, entonces la cadena en una matriz de números enteros

           (4): función de longitud () es el número efectivo de bits cadena disponible no contiene '\ 0'

           (5): 17 líneas y 21 líneas, len1- i - 1 es razón LEN1 es el número de dígitos 1 si sin disminuir, hará que los límites de la matriz. Guardar porque cuando i es detrás de la serie de analógico Además, la matriz de bits como la primera, pero en el que la cadena de bits original en última posición, por lo que para reducir i.

           (6): Antes de la salida de matriz final que debe tomar adicional 0 separó por filtración.

Supongo que te gusta

Origin www.cnblogs.com/guanrongda-KagaSakura/p/12516970.html
Recomendado
Clasificación