Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <cstdio>
- int cantDigitos(int numero) {
- int cociente, cant = 0;
- while (1) {
- cociente = numero / 10;
- numero = cociente;
- cant++;
- if (cociente == 0) break;
- }
- return cant;
- }
- int conversionBaseDiez(int numero, int base) {
- int totalDigitos, sumaBaseDiez = 0, residuo, cociente, potencia, residuoXPotencia;
- totalDigitos = cantDigitos(numero);
- for(int i = 0; i<totalDigitos; i++){
- residuo = numero % 10;
- cociente = numero / 10;
- numero = cociente; //salvamos el nuevo numero que queda
- potencia = 1;
- //Para las potencias
- for(int j = 0; j<i; j++){
- potencia = potencia*base;
- }
- residuoXPotencia = residuo*potencia;
- sumaBaseDiez = sumaBaseDiez + residuoXPotencia;
- }
- return sumaBaseDiez;
- }
- int numeroBaseN(int numero, int base) {
- int totalDigitos, residuo, numeroFormado = 0, numeroFinalFormado = 0, potenciaDiez = 10;
- totalDigitos = cantDigitos(numero);
- for(int i = 0;i<totalDigitos;i++){
- residuo = numero % base;
- numero = numero / base;
- if(i == 0)
- numeroFormado = residuo;
- else{
- for(int j = 0; j<i; j++)
- potenciaDiez = potenciaDiez * 10;
- numeroFormado = residuo*10*i;
- }
- numeroFinalFormado = numeroFinalFormado + numeroFormado;
- if(numero<base) {
- numeroFinalFormado = numeroFinalFormado + numero*potenciaDiez;
- break;
- }
- }
- return numeroFinalFormado;
- }
- int verificarNumero(int numero, int base) {
- int totalDigitos, residuo;
- totalDigitos = cantDigitos(numero);
- for (int i = 0; i < totalDigitos; i++) {
- residuo = numero % 10;
- numero = numero / 10;
- if (base <= residuo) return 0; // caso que no sea
- }
- return 1;
- }
- int main(int argc, char** argv) {
- int cantLeidos, base, numero, baseDiezNum, flagVerifica, espaciosBlancos, sumaTotalBaseDiez, numeroBaseTransformada;
- while (1) {
- //Para cada linea
- sumaTotalBaseDiez = 0;
- cantLeidos = scanf("%d", &espaciosBlancos); //Habia un problema con los parentesis mejor limpiamos los espacios inicales
- if (cantLeidos == EOF) break;
- cantLeidos = scanf("(%d) %d", &base, &numero);
- while (1) {
- if (cantLeidos == 2) {
- flagVerifica = verificarNumero(numero, base);
- if (flagVerifica == 1){
- printf("(%d) %d\t", base, numero);
- baseDiezNum = conversionBaseDiez(numero, base);
- sumaTotalBaseDiez = sumaTotalBaseDiez + baseDiezNum;
- }
- } else if (cantLeidos == 1) {//Cambio de linea solo leyo la ultima base de la suma
- printf("Suma Final = (%d)", base);
- numeroBaseTransformada = numeroBaseN(sumaTotalBaseDiez, base);
- printf("%d\n", numeroBaseTransformada);
- sumaTotalBaseDiez = 0; //Inicializamos para las demas lineas
- break;
- } else if (cantLeidos == EOF) break;
- //Para los siguientes numeros de la linea
- cantLeidos = scanf("%d", &espaciosBlancos); //Habia un problema con los parentesis mejor limpiamos los espacios inicales
- if (cantLeidos == EOF) break;
- cantLeidos = scanf("(%d) %d", &base, &numero);
- }
- if (cantLeidos == EOF) break;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement