Matemática
Problema 1193
Descrição
O professor de matemática de Juliano marcou uma prova cujo conteúdo será apenas conversão entre valores decimais, hexadecimais e binários. Uma das coisas mais complexas para Juliano é fazer estas conversões de base entre números. Por mais que estude, tem muita dificuldade para entender. Portanto, como você entende de computação e é amigo(a) de Juliano, ele solicitou a tua ajuda para que faça um programa que verifique se as conversões feitas por ele estão correta.
Entrada
A entrada contém vários casos de teste. A primeira linha da entrada contém um inteiro N, indicando o número de casos de teste que virão a seguir, um por linha. Cada caso de teste contém um valor X (X > 0) seguido de um texto Y com três caracteres, indicando se o valor X está no formato binário, decimal ou hexadecimal. Independente do formato, qualquer dos números deverá caber em um inteiro de 32 bits.
Saída
Para cada caso de teste, você deve apresentar o número de caso de teste seguido por duas linhas, que contém a conversão do valor fornecido para as outras duas bases. A sequência das bases de saída será sempre: decimal, hexadecimal (em minúsculo) e binário, ou seja deve-se respeitar esta ordem excluindo obviamente o formato de entrada.
Obs: deverá ser impressa uma linha em branco após cada caso de teste, inclusive após o último caso de teste.
Código
- include <iostream>
using namespace std;
- include <stdio.h>
- include <stdlib.h>
int bin_to_dec(int bin) {
int total = 0;
int potenc = 1;
while(bin > 0) {
total += bin % 10 * potenc;
bin = bin / 10;
potenc = potenc * 2;
}
return total;
}
int main() {
int x,n;
char y='b',k[10];
std::string name;
int j = 0;
cin >> n;
for(int i=0;i<n;i++){
cin >> x;
cin>>y;
getline (std::cin,name);
j++;
switch(y){
case 'b':
x=bin_to_dec(x);
printf("Case %d:\n%d dec\n%x hex\n\n",j,x,x);
break;
case 'h':
itoa(x,k,2);
printf("Case %d:\n%d dec\n%s bin\n\n",j,x,k);
break;
case 'd':
itoa(x,k,2);
printf("Case %d:\n%x hex\n%s bin\n\n",j,x,k);
break;
} } return 0;
}
Observações e explicações
- Explicação: Usando algumas propriedades da função printf, de imprimir um número em hexadecimal direto, sem fazer conversão, o problema maior seria imprimir em base binária, usando alguma função própria do c++.
- OBS: Como pode-se ver, esse código usa a função itoa (que muda um numero da base decimal para binária) da biblioteca <stdlib.h>. Se alguém conseguir mudá-lo colocando uma nova função que substitua essa, o URI concerteza vai aceitar.
Problema 1393 - Código
- include <iostream>
using namespace std;
int main() {
int i,n,v[50];
v[0]=0;
v[1]=1;
v[2]=2;
for(i=3;i<45;i++){
v[i] = v[i-1] + v[i-2];
}
while(cin>>n){
if(n==0) break;
cout << v[n] << endl;
}
return 0;
}