Java implements the basic algorithm of converting integers to Roman numerals

Table of contents

1. The origin of Roman numerals? 

2. Algorithm code

(1) Integer to Roman numeral algorithm code

(2)Roman numeral to integer algorithm code

3. Test results

(1) Test results of converting integers to Roman numerals

(2) Test results of converting Roman numerals to integers 


1. The origin of Roman numerals? 

Roman numerals are more than 2,000 years older than Arabic numerals and originated in ancient Rome.
About 2,500 years ago, when the Romans were in the early stages of their cultural development, they used their fingers as a calculation tool. To represent one, two, three, and four objects, stretch out one, two, three, and four fingers respectively; to represent five objects, stretch out one hand; to represent ten objects, stretch out two hands. This habit has been used by humans to this day. People often use such gestures to express numbers during conversations.
At that time, in order to record these numbers, the Romans drew I, II, and III on sheepskin to replace the number of fingers; when they wanted to represent a hand, they wrote "V" shape, indicating the shape of the big finger and index finger spread out; When representing two hands, it was drawn in the shape of "VV", and later it was written as "X" with one hand pointing up and one hand pointing down. This was the prototype of Roman numerals.
Later, in order to represent larger numbers, the Romans used the symbol C to represent one hundred. C is the first letter of the Latin "centum", which means one hundred (from which the English "century" comes). Use the symbol M to represent one thousand. M is the first letter of the Latin word "mille", and mille means one thousand. Take half of the letter C and make it the symbol L, which means fifty. Use the letter D to represent five hundred. If you draw a horizontal line above the number, the number will be expanded a thousand times. In this way, Roman numerals have the following seven basic symbols: I (1), V (5), X (10), L (50), C (100), D (500), M (1000). Roman numerals have different meanings from decimal numbers. They do not have a number representing zero and have nothing to do with the carry system. So people at that time expressed 0 as a space.

2. Algorithm code

(1) Integer to Roman numeral algorithm code

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)Roman numeral to integer algorithm code

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. Test results

(1) Test results of converting integers to Roman numerals

Integer [260] expressed in Roman numerals: CCLX
Integer [806] expressed in Roman numerals: DCCCVI
Integer [652] expressed in Roman numerals: DCLII
Integer [814] expressed in Roman numerals: DCCCXIV
Integer [539] expressed in Roman numerals: DXXXIX
Integer [456] expressed in Roman numerals: CDLVI
Integer [788] expressed in Roman numerals: DCCLXXXVIII
Integer [613] expressed in Roman numerals: DCXIII
Integer [756] expressed in Roman numerals: DCCLVI
Integer [235] expressed in Roman numerals: CCXXXV
Integer [281] expressed in Roman numerals: CCLXXXI
Integer [27] expressed in Roman numerals: XXVII
Integer [389] expressed in Roman numerals: CCCLXXXIX
Integer [138] expressed in Roman numerals: CXXXVIII
Integer [387] expressed in Roman numerals: CCCLXXXVII
Integer [927] expressed in Roman numerals: CMXXVII
Integer [712] expressed in Roman numerals: DCCXII
Integer [291] expressed in Roman numerals: CCXCI
Integer [328] expressed in Roman numerals: CCCXXVIII
Integer [955] expressed in Roman numerals: CMLV
Integer [104] expressed in Roman numerals: CIV
Integer [754] expressed in Roman numerals: DCCLIV
Integer [511] expressed in Roman numerals: DXI
Integer [256] expressed in Roman numerals: CCLVI
Integer [755] expressed in Roman numerals: DCCLV
Integer [938] expressed in Roman numerals: CMXXXVIII
Integer [9] expressed in Roman numerals: IX
Integer [501] expressed in Roman numerals: DI
Integer [238] expressed in Roman numerals: CCXXXVIII
Integer [465] expressed in Roman numerals: CDLXV
Integer [853] expressed in Roman numerals: DCCCLIII
Integer [771] expressed in Roman numerals: DCCLXXI
Integer [271] expressed in Roman numerals: CCLXXI
Integer [189] expressed in Roman numerals: CLXXXIX
Integer [561] expressed in Roman numerals: DLXI
Integer [427] expressed in Roman numerals: CDXXVII
Integer [561] expressed in Roman numerals: DLXI
Integer [255] expressed in Roman numerals: CCLV
Integer [935] expressed in Roman numerals: CMXXXV
Integer [513] expressed in Roman numerals: DXIII
Integer [956] expressed in Roman numerals: CMLVI
Integer [900] expressed in Roman numerals: CM
Integer [337] expressed in Roman numerals: CCXXXVII
Integer [630] expressed in Roman numerals: DCXXX
Integer [19]
expressed in Roman
numerals :


Integer [161] expressed in Roman numerals: CLXI
Integer [28] expressed in Roman numerals: XXVIII
Integer [930] expressed in Roman numerals: CMXXX
Integer [622] expressed in Roman numerals: DCXXII
Integer [692] expressed in Roman numerals: DCXCII
Integer [79] expressed in Roman numerals: LXXIX
Integer [785] expressed in Roman numerals: DCCLXXXV
Integer [862] expressed in Roman numerals: DCCCLXII
Integer [216] expressed in Roman numerals: CCXVI
Integer [646] expressed in Roman numerals: DCXLVI
Integer [704] expressed in Roman numerals: DCCIV
Integer [785] expressed in Roman numerals: DCCLXXXV
Integer [115] expressed in Roman numerals: CXV
Integer [127] expressed in Roman numerals: CXXVII
Integer [989] expressed in Roman numerals: CMLXXXIX
Integer [624] expressed in Roman numerals: DCXXIV
Integer [566] expressed in Roman numerals: DLXVI
Integer [613] expressed in Roman numerals: DCXIII
Integer [105] expressed in Roman numerals: CV
Integer [782] expressed in Roman numerals: DCCLXXXII
Integer [774] expressed in Roman numerals: DCCLXXIV
Integer [664] expressed in Roman numerals: DCLXIV
Integer [117] expressed in Roman numerals: CXVII
Integer [115] expressed in Roman numerals: CXV
Integer [981] expressed in Roman numerals: CMLXXXI
Integer [11] expressed in Roman numerals: XI
Integer [67] expressed in Roman numerals: LXVII
Integer [510] expressed in Roman numerals: DX
Integer [824] expressed in Roman numerals: DCCCXXIV
Integer [850] expressed in Roman numerals: DCCCL
Integer [79] expressed in Roman numerals: LXXIX
Integer [735] expressed in Roman numerals: DCCXXXV
Integer [496] expressed in Roman numerals: CDXCVI
Integer [925] expressed in Roman numerals: CMXXV
Integer [341] expressed in Roman numerals: CCCXLI
Integer [238] expressed in Roman numerals: CCXXXVIII
Integer [169] expressed in Roman numerals: CLXIX
Integer [6] expressed in Roman numerals: VI
Integer [856] expressed in Roman numerals: DCCCLVI
Integer [625] expressed in Roman numerals: DCXXV
Integer [397] expressed in Roman numerals: CCCXCVII
Integer [457] expressed in Roman numerals: CDLVII
Integer [448] expressed in Roman numerals: CDXLVIII
Integer [441] expressed in Roman numerals: CDXLI
Integer [47] expressed in Roman numerals: XLVII
Integer [193] expressed in Roman numerals: CXCIII
Integer [173] expressed in Roman numerals: CLXXIII
Integer [33] expressed in Roman numerals: XXXIII
Integer [263] expressed in Roman numerals: CCLXIII
Integer [870] expressed in Roman numerals: DCCCLXX
Integer [724] expressed in Roman numerals: DCCXXIV

(2) Test results of converting Roman numerals to integers 

DCCLXXXVIII Roman numerals converted to integers are: 788

Guess you like

Origin blog.csdn.net/qq_19309473/article/details/133568520