Java implementa el algoritmo básico de conversión de números enteros a números romanos

Tabla de contenido

1. ¿El origen de los números romanos? 

2. Código de algoritmo

(1) Código de algoritmo de números enteros a romanos

(2) Código de algoritmo de número romano a entero

3. Resultados de la prueba

(1) Resultados de la prueba de conversión de números enteros a números romanos

(2) Resultados de la prueba de conversión de números romanos a números enteros 


1. ¿El origen de los números romanos? 

Los números romanos son más de 2000 años más antiguos que los números arábigos y se originaron en la antigua Roma.
Hace unos 2.500 años, cuando los romanos se encontraban en las primeras etapas de su desarrollo cultural, utilizaban los dedos como herramienta de cálculo. Para representar uno, dos, tres y cuatro objetos, extienda uno, dos, tres y cuatro dedos respectivamente; para representar cinco objetos, extienda una mano; para representar diez objetos, extienda dos manos. Este hábito ha sido utilizado por los humanos hasta el día de hoy. La gente suele utilizar estos gestos para expresar números durante las conversaciones.
En aquella época, para registrar estos números, los romanos dibujaban I, II y III en piel de oveja para sustituir el número de dedos; cuando querían representar una mano, escribían forma de "V", indicando la forma del gran dedo e índice extendidos; al representar dos manos, se dibujó en forma de "VV", y luego se escribió como "X" con una mano apuntando hacia arriba y la otra hacia abajo, este fue el prototipo de los números romanos. .
Posteriormente, para representar números mayores, los romanos utilizaron el símbolo C para representar cien. C es la primera letra del latín "centum", que significa cien (de donde proviene el inglés "siglo"). Usa el símbolo M para representar mil. M es la primera letra de la palabra latina "mille" y mille significa mil. Toma la mitad de la letra C y conviértela en el símbolo L, que significa cincuenta. Usa la letra D para representar quinientos. Si dibuja una línea horizontal encima del número, el número se ampliará mil veces. De esta forma, los números romanos tienen los siguientes siete símbolos básicos: I (1), V (5), X (10), L (50), C (100), D (500), M (1000). Los números romanos tienen significados diferentes a los números decimales: no tienen un número que represente el cero y no tienen nada que ver con el sistema de acarreo. Entonces la gente en ese momento expresaba 0 como un espacio.

2. Código de algoritmo

(1) Código de algoritmo de números enteros a romanos

package learnProject.csdn;

import java.util.Random;

/**
 * 
 * @author Roc-xb
 *
 */
public class IntegerToRoman {

	private static int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
	private static String[] symbols = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };

	public static String intToRoman(int num) {
		StringBuilder sb = new StringBuilder();
		int i = 0;
		while (num > 0) {
			if (num >= values[i]) {
				sb.append(symbols[i]);
				num -= values[i];
			} else {
				i++;
			}
		}
		return sb.toString();
	}

	public static void main(String[] args) {
		for (int num = 1; num <= 100; num++) {
			// 随机测试
			int randomInt = new Random().nextInt(1000);
			System.out.println(String.format("整数【%d】用罗马数字表示:%s", randomInt, intToRoman(randomInt)));
		}

	}
}

(2) Código de algoritmo de número romano a entero

package learnProject.csdn;

public class RomanToInteger {

	  public static int romanToInt(String s) {
	        int result = 0;
	        int prevValue = 0;

	        for (int i = s.length() - 1; i >= 0; i--) {
	            char c = s.charAt(i);
	            int currValue = getRomanValue(c);

	            if (currValue < prevValue) {
	                result -= currValue;
	            } else {
	                result += currValue;
	            }

	            prevValue = currValue;
	        }

	        return result;
	    }

	    public static int getRomanValue(char c) {
	        switch (c) {
	            case 'I':
	                return 1;
	            case 'V':
	                return 5;
	            case 'X':
	                return 10;
	            case 'L':
	                return 50;
	            case 'C':
	                return 100;
	            case 'D':
	                return 500;
	            case 'M':
	                return 1000;
	            default:
	                return 0;
	        }
	    }

	    public static void main(String[] args) {
	        String roman = "DCCLXXXVIII";
	        int num = romanToInt(roman);
	        System.out.println(String.format("%s罗马数字转换成整数为:%d",roman, num));
	    }
}

3. Resultados de la prueba

(1) Resultados de la prueba de conversión de números enteros a números romanos

Entero [260] expresado en números romanos: CCLX
Entero [806] expresado en números romanos: DCCCVI
Entero [652] expresado en números romanos: DCLII
Entero [814] expresado en números romanos: DCCCXIV
Entero [539] expresado en números romanos: DXXXIX
Entero [456] expresado en números romanos: CDLVI
Entero [788] expresado en números romanos: DCCLXXXVIII
Entero [613] expresado en números romanos: DCXIII
Entero [756] expresado en números romanos: DCCLVI
Entero [235] expresado en números romanos: CCXXXV
Entero [281] expresado en números romanos: CCLXXXI
Entero [27] expresado en números romanos: XXVII
Entero [389] expresado en números romanos: CCCLXXXIX
Entero [138] expresado en números romanos: CXXXVIII
Entero [387] expresado en números romanos: CCCLXXXVII
Entero [927] expresado en números romanos: CMXXVII
Entero [712] expresado en números romanos: DCCXII
Entero [291] expresado en números romanos: CCXCI
Entero [328] expresado en números romanos: CCCXXVIII
Entero [955] expresado en números romanos: CMLV
Entero [104] expresado en números romanos: CIV
Entero [754] expresado en números romanos: DCCLIV
Entero [511] expresado en números romanos: DXI
Entero [256] expresado en números romanos: CCLVI
Entero [755] expresado en números romanos: DCCLV
Entero [938] expresado en números romanos: CMXXXVIII
Entero [9] expresado en números romanos: IX
Entero [501] expresado en números romanos: DI
Entero [238] expresado en números romanos: CCXXXVIII
Entero [465] expresado en números romanos: CDLXV
Entero [853] expresado
en números romanos: DCCCLIII Entero [771] expresado en números romanos: DCCLXXI
Entero [271] expresado en números romanos: CCLXXI
Entero [189] expresado en números romanos: CLXXXIX
Entero [561] expresado en números romanos: DLXI
Entero [427] expresado en números romanos: CDXXVII
Entero [561] expresado en números romanos: DLXI
Entero [255] expresado en números romanos: CCLV
Entero [935] expresado en números romanos: CMXXXV
Entero [513] expresado en números romanos: DXIII
Entero [956] expresado en números romanos: CMLVI
Entero [900] expresado en números romanos: CM
Entero [337] expresado en números romanos: CCXXXVII
Entero [630] expresado en números romanos: DCXXX
Entero [19]
expresado en
números
romanos
:
Entero [161] expresado en números romanos: CLXI
Entero [28] expresado en números romanos: XXVIII
Entero [930] expresado en números romanos: CMXXX
Entero [622] expresado en números romanos: DCXXII
Entero [692] expresado en números romanos: DCXCII
Entero [79] expresado en números romanos: LXXIX
Entero [785] expresado en números romanos: DCCLXXXV
Entero [862] expresado en números romanos: DCCCLXII
Entero [216] expresado en números romanos: CCXVI
Entero [646] expresado en números romanos: DCXLVI
Entero [704] expresado en números romanos: DCCIV
Entero [785] expresado en números romanos: DCCLXXXV
Entero [115] expresado en números romanos: CXV
Entero [127] expresado en números romanos: CXXVII
Entero [989] expresado en números romanos: CMLXXXIX
Entero [624] expresado en números romanos: DCXXIV
Entero [566] expresado en números romanos: DLXVI
Entero [613] expresado en números romanos: DCXIII
Entero [105] expresado en números romanos: CV
Entero [782] expresado en números romanos: DCCLXXXII
Entero [774] expresado en números romanos: DCCLXXIV
Entero [664] expresado en números romanos: DCLXIV
Entero [117] expresado en números romanos: CXVII
Entero [115] expresado en números romanos: CXV
Entero [981] expresado en números romanos: CMLXXXI
Entero [11] expresado en números romanos: XI
Entero [67] expresado en números romanos: LXVII
Entero [510] expresado en números romanos: DX
Entero [824] expresado en números romanos: DCCCXXIV
Entero [850] expresado en números romanos: DCCCL
Entero [79] expresado en números romanos: LXXIX
Entero [735] expresado en números romanos: DCCXXXV
Entero [496] expresado en números romanos: CDXCVI
Entero [925] expresado en números romanos: CMXXV
Entero [341] expresado en números romanos: CCCXLI
Entero [238] expresado en números romanos: CCXXXVIII
Entero [169] expresado en números romanos: CLXIX
Entero [6] expresado en números romanos: VI
Entero [856] expresado en números romanos: DCCCLVI
Entero [625] expresado en números romanos: DCXXV
Entero [397] expresado en números romanos: CCCXCVII
Entero [457] expresado en números romanos: CDLVII
Entero [448] expresado en números romanos: CDXLVIII
Entero [441] expresado en números romanos: CDXLI
Entero [47] expresado en números romanos: XLVII
Entero [193] expresado en números romanos: CXCIII
Entero [173] expresado en números romanos: CLXXIII
Entero [33] expresado en números romanos: XXXIII
Entero [263] expresado en números romanos: CCLXIII
Entero [870] expresado en números romanos: DCCCLXX
Entero [724] expresado en números romanos: DCCXXIV

(2) Resultados de la prueba de conversión de números romanos a números enteros 

DCCLXXXVIII El número romano convertido a número entero es: 788

Supongo que te gusta

Origin blog.csdn.net/qq_19309473/article/details/133568520
Recomendado
Clasificación