Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1960. Mostrar todas as postagens
Mostrando postagens com marcador 1960. Mostrar todas as postagens

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;
}

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