Pesquisar este blog

Livros Recomendados

domingo, 28 de fevereiro de 2021

URI (BEECROWD) - 1960 - Numeração Romana para Números de Página - Iniciante - C e C++

O exercício de numeração romana é interessante! Foi mais "braçal", mas interessante mesmo assim. Confira abaixo!

Plataforma: URI (BEECROWD)

Problema1960

Enunciado:

A ECI (Editio Chronica Incredibilis ou Editora de Crônicas Incríveis) é muito tradicional quando se trata de numerar as páginas de seus livros. Ela sempre usa a numeração romana para isso. E seus livros nunca ultrapassam as 999 páginas pois, quando necessário, dividem o livro em volumes.

Você deve escrever um programa que, dado um número arábico, mostra seu equivalente na numeração romana. 

Lembre que I representa 1, V é 5, X é 10, L é 50, C é 100, D é 500 e M representa 1000.

Linguagens: C e C++


Solução: 

O segredo aqui é separar os valores em unidade, dezena e centena, e com base em cada caso que gera uma letra diferente ou um conjunto de letras. Por exemplo, o valor 9 é representado por IX. O valor 10 é representado por X. O valor 900 é CM. A iteração deve acontecer enquanto existir o valor n.

Código em C:

#include <stdio.h>

int main() {
    int n, resto, contador = 1;
    char unidade[5];
    char dezena[5];
    char centena[5];
    
    scanf("%i", &n);
    unidade[5] = NULL;
    dezena[5] = NULL;
    centena[5] = NULL;
    
    while (n) {
        resto = n % (10 * contador);
        contador *= 10;
        n -= resto;
        
        switch (resto) {
            case 0: if (contador==10) strcpy(unidade, "");
            break;
            case 1: strcpy(unidade, "I");
            break;
            case 2: strcpy(unidade, "II");
            break;
            case 3: strcpy(unidade, "III");
            break;
            case 4: strcpy(unidade, "IV");
            break;
            case 5: strcpy(unidade, "V");
            break;
            case 6: strcpy(unidade, "VI");
            break;
            case 7: strcpy(unidade, "VII");
            break;
            case 8: strcpy(unidade, "VIII");
            break;
            case 9: strcpy(unidade, "IX");
            break;
            case 10: strcpy(dezena, "X");
            break;
            case 20: strcpy(dezena, "XX");
            break;
            case 30: strcpy(dezena, "XXX");
            break;
            case 40: strcpy(dezena, "XL");
            break;
            case 50: strcpy(dezena, "L");
            break;
            case 60: strcpy(dezena, "LX");
            break;
            case 70: strcpy(dezena, "LXX");
            break;
            case 80: strcpy(dezena, "LXXX");
            break;
            case 90: strcpy(dezena, "XC");
            break;
            case 100: strcpy(centena, "C");
            break;
            case 200: strcpy(centena, "CC");
            break;
            case 300: strcpy(centena, "CCC");
            break;
            case 400: strcpy(centena, "CD");
            break;
            case 500: strcpy(centena, "D");
            break;
            case 600: strcpy(centena, "DC");
            break;
            case 700: strcpy(centena, "DCC");
            break;
            case 800: strcpy(centena, "DCCC");
            break;
            case 900: strcpy(centena, "CM");
            break;
            default: break;
        }
    }
    printf("%s%s%s\n", centena, dezena, unidade);

    return 0;
}

Código em C++:

#include <iostream>
#include <string.h>

using namespace std;

int main() {
    int n, resto, contador = 1;
    string unidade = "", dezena = "", centena = "";
    
    cin >> n;
    
    while (n) {
        resto = n % (10 * contador);
        contador *= 10;
        n -= resto;
        
        switch (resto) {
            case 0:
            break;
            case 1: unidade = "I";
            break;
            case 2: unidade = "II";
            break;
            case 3: unidade = "III";
            break;
            case 4: unidade = "IV";
            break;
            case 5: unidade = "V";
            break;
            case 6: unidade = "VI";
            break;
            case 7: unidade = "VII";
            break;
            case 8: unidade = "VIII";
            break;
            case 9: unidade = "IX";
            break;
            case 10: dezena = "X";
            break;
            case 20: dezena = "XX";
            break;
            case 30: dezena = "XXX";
            break;
            case 40: dezena = "XL";
            break;
            case 50: dezena = "L";
            break;
            case 60: dezena = "LX";
            break;
            case 70: dezena = "LXX";
            break;
            case 80: dezena = "LXXX";
            break;
            case 90: dezena = "XC";
            break;
            case 100: centena = "C";
            break;
            case 200: centena = "CC";
            break;
            case 300: centena = "CCC";
            break;
            case 400: centena = "CD";
            break;
            case 500: centena = "D";
            break;
            case 600: centena = "DC";
            break;
            case 700: centena = "DCC";
            break;
            case 800: centena = "DCCC";
            break;
            case 900: centena = "CM";
            break;
            default: break;
        }
    }
    cout << centena << dezena << unidade << 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