Java实现整数互转罗马数字基本算法

Java实现整数互转罗马数字基本算法_第1张图片

目录

一、罗马数字的起源? 

二、算法代码

(1)整数转罗马数字算法代码

(2)罗马数字转整数算法代码

三、测试结果

(1)整数转罗马数字测试结果

(2)罗马数字转整数测试结果 


一、罗马数字的起源? 

罗马数字比阿拉伯数字早 2000 多年,起源于古罗马。
大约在两千五百年前,罗马人还处在文化发展的初期,当时他们用手指作为计算工具。为了表示一、二、三、四个物体,就分别伸出一、二、三、四个手指;表示五个物体就伸出一只手;表示十个物体就伸出两只手。这种习惯人类一直沿用到今天。人们在交谈中,往往就是运用这样的手势来表示数字的。
当时,罗马人为了记录这些数字,便在羊皮上画出 Ⅰ、Ⅱ、Ⅲ 来代替手指的数;要表示一只手时,就写成“Ⅴ”形,表示大指与食指张开的形状;表示两只手时,就画成“ⅤⅤ”形,后来又写成一只手向上、一只手向下的“Ⅹ”,这就是罗马数字的雏形。
后来为了表示较大的数,罗马人用符号 C 表示一百。C 是拉丁文“centum”的头一个字母,centum 就是一百的意思(英文“century”就是由此而来)。用符号 M 表示一千。M 是拉丁文“mille”的头一个字母,mille 就是一千的意思。取字母 C 的一半,成为符号 L,表示五十。用字母 D 表示五百。若在数的上面画一横线,这个数就扩大一千倍。这样,罗马数字就有下面七个基本符号:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、 M(1000)。罗马数字与十进位数字的意义不同,它没有表示零的数字,与进位制无关。所以当时的人们表示0用空格表示。

二、算法代码

(1)整数转罗马数字算法代码

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)罗马数字转整数算法代码

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

三、测试结果

(1)整数转罗马数字测试结果

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

(2)罗马数字转整数测试结果 

DCCLXXXVIII罗马数字转换成整数为:788

你可能感兴趣的:(后端,java,算法,开发语言,罗马数字)