Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //https://www.aceptaelreto.com/problem/statement.php?id=163&cat=16
- //Codigo version 3. Optimizado
- /*
- Nombre : Carlos Eduardo Ardila Patiño
- RUT : 25.612.549-8
- Programa: Sumale uno a un numero hexadecimal
- Fecha : 25/06/2017
- */
- #include <stdio.h>
- #include <string.h>
- #define MAX 101
- void *hexmasuno ( char *cadenita); //Prototipo de la funcion que sumara y escribira el numero
- int soloF (char *cadena, int largoCadena); //Prototipo de la funcion que busca si es un numero con solo F's
- int main(){
- char cadena[MAX];
- char fin[4]="FIN";
- do{ //Se lee cadenas de numeros en Hexadecimal, hasta que se ingresa "FIN"
- strcpy(cadena,"");
- scanf("%[^\n]s",cadena);
- getchar();
- if(strcmp(cadena,fin) == 0){
- break;
- }
- hexmasuno(cadena); //Se invoca la funcion que suma el y escribe el numero
- }while(strcmp(cadena,fin) != 0);
- return 0;
- }
- int soloF (char *cadena, int largoCadena){ //Definicion de la funcion soloF, que evalua si un numero tiene solo F
- int i;
- int flag = 1;
- for(i = 0; i < largoCadena; i++){
- if(cadena[i] != 'F'){
- flag = 0;
- }
- }
- return flag;
- }
- void *hexmasuno ( char *cadenita){ //Definicion de la funcion hexmasuno
- char hexadecimal[17] = "0123456789ABCDEF"; //Cadena Arreglada, gracias profesora!
- int i, j, largo;
- int acarreo = 1;
- char cadena[102];
- largo = strlen(cadenita); //Se lee el largo de la cadena
- int indice = 0;
- char *puntero;
- if(soloF(cadenita,largo)){ //Se invoca la funcion solo F y se evalua si el numero es solo F para saltarnos los acarreos
- printf("1");
- for(i = 0; i < largo; i++){
- printf("0");
- }
- printf("\n"); //Bug del enter arreglado, gracias profesora!
- }
- else{
- if(cadenita[largo-1] != 'F'){ //Si la cadena en su ultimo digito no es F, esta itera solo una vez, ya que no utiliza acarreos
- puntero = strchr(hexadecimal, cadenita[largo-1]);
- indice = puntero - hexadecimal;
- cadenita[largo-1] = hexadecimal[indice + 1];
- printf("%s\n",cadenita);
- }
- else{
- cadenita[largo-1] = hexadecimal[0]; //Si último digito de el número es F, se le asigna le asigna 0 y empieza el acarreo
- for(i = largo-2; i >= 0; i--){
- if(acarreo){
- if(cadenita[i] != 'F'){ //Si el numero siguientes despues de la primera F es diferente de F, se realiza el acarreo y termina la suma del programa
- puntero = strchr(hexadecimal, cadenita[i]);
- indice = puntero - hexadecimal;
- cadenita[i] = hexadecimal[indice + 1];
- acarreo = 0;
- break;
- }
- else{ //Si el numero es F continua el acarreo
- cadenita[i] = '0';
- acarreo = 1;
- }
- }
- }
- printf("%s\n",cadenita);
- }
- }
- cadena[largo] = '\0';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement