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)
Problema: 1199
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