Dado un número entero, la tarea es escribir un programa en Python para convertir números enteros a romanos.
Ejemplos:
Input: 5 Output: V Input: 9 Output: IX Input: 40 Output: XL Input: 1904 Output: MCMIV
La siguiente tabla muestra la lista de símbolos romanos, incluidos sus valores enteros correspondientes también:
simbolos | Valores |
---|---|
yo | 1 |
IV | 4 |
V | 5 |
IX | 9 |
X | 10 |
SG | 40 |
L | 50 |
XC | 90 |
C | 100 |
CD | 400 |
D | 500 |
CM | 900 |
METRO | 1000 |
La idea es convertir las unidades, decenas, centenas y miles de lugares del número dado por separado. Si el dígito es 0, entonces no hay ningún símbolo de número romano correspondiente. La conversión de los dígitos 4 y 9 es un poco diferente de otros dígitos porque estos dígitos siguen la notación sustractiva.
Algoritmo para convertir un valor entero a número romano
Compara el número dado con valores base en el orden 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1. El valor base que es menor o igual al número dado será el valor base inicial (valor base más grande), divida el número por su valor base más grande, el símbolo base correspondiente se repetirá cociente veces, el resto se convertirá en el número para futuras divisiones y repeticiones. El proceso se repetirá hasta que el número sea cero.
Método 1:
- Número inicial = 3549, Desde 3549 >= 1000 ; el valor base más grande será 1000 inicialmente. Y Divide 3549/1000. Cociente = 3, Resto =549. El símbolo M correspondiente se repetirá tres veces.
- Ahora, el número se convierte en 549 y 1000> 549> = 500, el valor base más grande será 500 y luego se dividirá 549/500. Cociente = 1, Resto =49. El símbolo D correspondiente se repetirá una vez.
- Ahora, número = 49 y 50 > 49 >= 40, el valor base más grande es 40. Luego divide 49/40. Cociente = 1, Resto = 9. El símbolo XL correspondiente se repetirá una vez.
- Ahora, número = 9 y 10 > 9 >= 9, el valor base más grande es 9. Luego divide 9/9. Cociente = 1, Resto = 0. El símbolo IX correspondiente se repetirá una vez.
- Finalmente, el número se convierte en 0, el algoritmo se detiene aquí. La salida obtenida MMMDXLIX.
El siguiente ejemplo muestra la implementación del algoritmo anterior:
Python3
# Python3 program to convert # integer value to roman values # Function to convert integer to Roman values def printRoman(number): num = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000] sym = ["I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"] i = 12 while number: div = number // num[i] number %= num[i] while div: print(sym[i], end = "") div -= 1 i -= 1 # Driver code if __name__ == "__main__": number = 3549 print("Roman value is:", end = " ") printRoman(number)
Producción:
Roman value is: MMMDXLIX
Método 2:
En este método, primero tenemos que observar el problema. El número dado en el enunciado del problema puede tener un máximo de 4 dígitos. La idea para resolver este problema es:
- Divide el número dado en dígitos en diferentes lugares como uno, dos, cien o mil.
- A partir del lugar de las mil imprima el valor romano correspondiente. Por ejemplo, si el dígito en el lugar de mil es 3, imprima el equivalente romano de 3000.
- Repetir el segundo paso hasta llegar al lugar de uno.
Supongamos que el número de entrada es 3549. Entonces, comenzando desde el lugar de mil, comenzaremos a imprimir el equivalente romano. En este caso, imprimiremos en el orden que se indica a continuación:
- El equivalente romano de 3000
- El equivalente romano de 500
- El equivalente romano de 40
- El equivalente romano de 9
Entonces, la salida será: MMMDXLIX
El siguiente ejemplo muestra la implementación del enfoque anterior:
Python3
# Python3 program for above approach # Function to calculate Roman values def intToRoman(num): # Storing roman values of digits from 0-9 # when placed at different places m = ["", "M", "MM", "MMM"] c = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM "] x = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"] i = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"] # Converting to roman thousands = m[num // 1000] hundreds = c[(num % 1000) // 100] tens = x[(num % 100) // 10] ones = i[num % 10] ans = (thousands + hundreds + tens + ones) return ans # Driver code if __name__ == "__main__": number = 3549 print(intToRoman(number))
Producción:
MMMDXLIX
Método 3:
En este enfoque, consideramos el dígito significativo principal en el número. Ej: en 1234, el dígito significativo principal es 1. De manera similar, en 345 es 3. Para extraer el dígito significativo principal, necesitamos mantener un divisor (llamémoslo div) como 1000 para 1234 (ya que 1234 / 1000 = 1) y 100 por 345 (345 / 100 = 3). Además, mantengamos un diccionario llamado número romano = {1: ‘I’, 5: ‘V’, 10: ‘X’, 50: ‘L’, 100: ‘C’, 500: ‘D’, 1000: ‘ METRO’}
El siguiente ejemplo muestra la implementación del algoritmo anterior:
Python3
# Python 3 program to convert integer # number to Roman values import math def integerToRoman(A): romansDict = \ { 1: "I", 5: "V", 10: "X", 50: "L", 100: "C", 500: "D", 1000: "M", 5000: "G", 10000: "H" } div = 1 while A >= div: div *= 10 div /= 10 res = "" while A: # main significant digit extracted # into lastNum lastNum = int(A / div) if lastNum <= 3: res += (romansDict[div] * lastNum) elif lastNum == 4: res += (romansDict[div] + romansDict[div * 5]) elif 5 <= lastNum <= 8: res += (romansDict[div * 5] + (romansDict[div] * (lastNum - 5))) elif lastNum == 9: res += (romansDict[div] + romansDict[div * 10]) A = math.floor(A % div) div /= 10 return res # Driver code print("Roman value for the integer is:" + str(integerToRoman(3549)))
Producción:
Roman value for the integer is: MMMDXLIX
Publicación traducida automáticamente
Artículo escrito por Kanchan_Ray y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA