Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <cstdio>
  3.  
  4. int cantDigitos(int numero) {
  5.     int cociente, cant = 0;
  6.     while (1) {
  7.         cociente = numero / 10;
  8.         numero = cociente;
  9.         cant++;
  10.         if (cociente == 0) break;
  11.     }
  12.     return cant;
  13. }
  14.  
  15. int conversionBaseDiez(int numero, int base) {
  16.     int totalDigitos, sumaBaseDiez = 0, residuo, cociente, potencia, residuoXPotencia;
  17.     totalDigitos = cantDigitos(numero);
  18.     for(int i = 0; i<totalDigitos; i++){
  19.         residuo = numero % 10;
  20.         cociente = numero / 10;
  21.         numero  = cociente; //salvamos el nuevo numero que queda
  22.         potencia = 1;
  23.         //Para las potencias
  24.         for(int j = 0; j<i; j++){
  25.             potencia = potencia*base;
  26.         }
  27.         residuoXPotencia = residuo*potencia;
  28.         sumaBaseDiez = sumaBaseDiez + residuoXPotencia;
  29.     }
  30.     return sumaBaseDiez;
  31. }
  32.  
  33. int numeroBaseN(int numero, int base) {
  34.     int totalDigitos, residuo, numeroFormado = 0, numeroFinalFormado = 0, potenciaDiez = 10;
  35.     totalDigitos = cantDigitos(numero);
  36.     for(int i = 0;i<totalDigitos;i++){
  37.         residuo = numero % base;
  38.         numero = numero / base;
  39.         if(i == 0)
  40.             numeroFormado = residuo;
  41.         else{
  42.             for(int j = 0; j<i; j++)
  43.                 potenciaDiez = potenciaDiez * 10;
  44.             numeroFormado = residuo*10*i;
  45.         }
  46.         numeroFinalFormado = numeroFinalFormado + numeroFormado;
  47.         if(numero<base) {
  48.             numeroFinalFormado = numeroFinalFormado + numero*potenciaDiez;
  49.             break;
  50.         }
  51.     }
  52.     return numeroFinalFormado;
  53. }
  54.  
  55. int verificarNumero(int numero, int base) {
  56.     int totalDigitos, residuo;
  57.     totalDigitos = cantDigitos(numero);
  58.     for (int i = 0; i < totalDigitos; i++) {
  59.         residuo = numero % 10;
  60.         numero = numero / 10;
  61.         if (base <= residuo) return 0; // caso que no sea
  62.     }
  63.     return 1;
  64. }
  65.  
  66. int main(int argc, char** argv) {
  67.     int cantLeidos, base, numero, baseDiezNum, flagVerifica, espaciosBlancos, sumaTotalBaseDiez, numeroBaseTransformada;
  68.     while (1) {
  69.         //Para cada linea
  70.         sumaTotalBaseDiez = 0;
  71.         cantLeidos = scanf("%d", &espaciosBlancos); //Habia un problema con los parentesis mejor limpiamos los espacios inicales
  72.         if (cantLeidos == EOF) break;
  73.         cantLeidos = scanf("(%d) %d", &base, &numero);
  74.         while (1) {
  75.             if (cantLeidos == 2) {
  76.                 flagVerifica = verificarNumero(numero, base);
  77.                 if (flagVerifica == 1){
  78.                     printf("(%d) %d\t", base, numero);
  79.                     baseDiezNum = conversionBaseDiez(numero, base);
  80.                     sumaTotalBaseDiez = sumaTotalBaseDiez + baseDiezNum;
  81.                 }
  82.             } else if (cantLeidos == 1) {//Cambio de linea solo leyo la ultima base de la suma
  83.                 printf("Suma Final = (%d)", base);
  84.                 numeroBaseTransformada = numeroBaseN(sumaTotalBaseDiez, base);
  85.                 printf("%d\n", numeroBaseTransformada);
  86.                 sumaTotalBaseDiez = 0; //Inicializamos para las demas lineas
  87.                 break;
  88.             } else if (cantLeidos == EOF) break;
  89.             //Para los siguientes numeros de la linea
  90.             cantLeidos = scanf("%d", &espaciosBlancos); //Habia un problema con los parentesis mejor limpiamos los espacios inicales
  91.             if (cantLeidos == EOF) break;
  92.             cantLeidos = scanf("(%d) %d", &base, &numero);
  93.         }
  94.         if (cantLeidos == EOF) break;
  95.     }
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement