Pesquisar este blog

Livros Recomendados

quinta-feira, 18 de fevereiro de 2021

URI (BEECROWD) - 1199 - Conversão Simples de Base - Matemática - C e C++

Novidade por aqui! Resolvi um problema de matemática, o que não tem sido tão comum :)))
Dessa vez é o problema de conversão simples de base, do Beecrowd. Vejam abaixo a resposta!

Plataforma: URI (BEECROWD)

Problema1199

Enunciado:

Neste problema você é solicitado a escrever um simples programa de conversão de base. A entrada será um valor hexadecimal ou decimal. Você deverá converter cada valor da entrada. Se o valor for hexadecimal, você deve convertê-lo para decimal e vice-versa. O valor hexadecimal inicia sempre com “0x” ou também, é aquele valor cuja segunda casa contém a letra 'x'.


Linguagens: C e C++


Solução:

Código em C:

É necessário testar se o valor inicia por "0x". Neste caso, trata-se de um hexadecimal, portanto, é necessário ler com %x. A leitura é feita com sscanf porque a operação ocorre como se fosse uma string, então passando para a variável r. No fim, basta imprimir r. No caso de não ser hexa, será decimal. Neste caso, o sscanf lê com %d e o printf formata com %0x%X para exibir o valor em hexa.

#include <stdio.h>

int main() {
    
    char s[15];
    int r;
    
    while (scanf("%s\n", s) != EOF) {
        
        if (s[0] != '-') {
            
            if (s[0] == '0' && s[1] == 'x') {
                sscanf(s, "%x", &r);
                printf("%d\n", r);
            }
            else {
                sscanf(s, "%d", &r);
                printf("0x%X\n", r);
            }
        }

    }

    return 0;
}

Código em C++:

Aqui o código fica um pouco parecido com o anterior, mas existem os fluxos dec e hex para C++. No caso do hexa, como o X deve aparecer maiúsculo na saída, coloco ainda um uppercase no fluxo de saída. Para usar o sscanf é necessário converter a string para o formato de string em C. Isso é feito com s.c_str().

#include <cstdio>
#include <iostream>
#include <string>

using namespace std;

int main() {
    
    string s;
    int r;
    
    while (cin >> s) {
        
        if (s[0] == '-') break;
            
        if (s[1] == 'x') {
            sscanf(s.c_str(), "%x", &r);
            cout << dec << r << endl;
        }
        else {
            sscanf(s.c_str(), "%d", &r);
            cout << "0x";
            cout << hex << uppercase << r << endl;
        }

    }

    return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas