Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.82 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(int argc, char *argv[]) {
  5.    
  6.     cout<<"Ingrese numero: ";
  7.     int nro;
  8.     cin>>nro;
  9.    
  10.     // Control de errores
  11.     if ( !cin.good() ) {
  12.         cerr<<"El numero ingresado es demasiado grande";
  13.         return 1;
  14.     }
  15.    
  16.     /* Calculando la cantidad de dígitos del número. Lo hago de la sig manera: averiguando el mayor
  17.     divisor del número, que sea múltiplo de 10. Por ej, si el número es 123456, el mayor divisor múltiplo
  18.     de 10 va  ser 100.000 y de esta forma sé que tiene 6 dígitos. */
  19.  
  20.     int largo = 1; // Variable que almacena el múltiplo.
  21.     int aux = 10;
  22.     while ( nro % largo != nro % aux ) {
  23.  
  24.     /* Cuando ni largo ni aux sean divisores de nro, el mod (%) va a dar como resultado el nro completo,
  25.     y por ende van a dar el mismo resultado. */
  26.  
  27.         largo *= 10; // Aumento al siguiente múltiplo de 10.
  28.         aux *= 10;
  29.     }
  30.  
  31.     largo /= 10; // Ya me salí de los números divisores, así que vuelvo al anterior.
  32.     int digitos = 0;
  33.     aux = largo;
  34.     while (true) {
  35.         aux /= 10;
  36.         ++digitos;
  37.         if (aux < 10)
  38.             break;
  39.    
  40.     /* En este while voy decrementando el índice de multiplicidad de 10 del valor que encontramos, y cada
  41.     decremento es un dígito más. Cuando no puede decrementar más sale del while */
  42.  
  43.     }
  44.  
  45.     ++digitos; // Porque el while anterior no toma al último dígito, lo agrego acá.
  46.  
  47.     // Controlamos...
  48.     cout<<"El nro tiene "<<digitos<<" digitos"<<endl<<endl;
  49.    
  50.     int A[10]; // Cantida máxima de dígitos para un int.
  51.    
  52.     for(int i=0;i<digitos;i++) {
  53.         A[i] = (nro - nro % largo) / largo;
  54.         nro -= nro - nro % largo;
  55.         largo /= 10;
  56.        
  57.         /* Lo que hace este for en cada vuelta es leer el primer dígito de la izquierda, guardarlo y
  58.         "cortarlo" del nro */
  59.     }
  60.  
  61.     cout<<"Mostrando arreglo...\n\n";
  62.     for(int i=0;i<digitos;i++) {
  63.         cout<<A[i]<<endl;
  64.     }
  65.  
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement