题12、 整数转罗马数字

题12、 整数转罗马数字

题目

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

例如: 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

思路

简单粗暴,直接从最大到最小以此迭代,最后得到输出值。

需要注意的就是对于4 9 49 90等等的处理。

代码

public class T012 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println( intToRoman( 3 ) );		//III
		System.out.println( intToRoman( 4 ) );		//IV
		System.out.println( intToRoman( 9 ) );		//IX
		System.out.println( intToRoman( 58 ) );		//LVIII
		System.out.println( intToRoman( 1994 ) );	//MCMXCIV
	}
	
    public static String intToRoman(int num) {
    	
    	if( num/1000 >= 1 ) {
    		return "M"+ intToRoman( num-1000 );
    	}else if( num/900 == 1 ) {
    		return "CM"+ intToRoman( num-900 );
    	}else if( num/500 >= 1 ) {
    		return "D"+ intToRoman( num-500 );
    	}else if( num/400 == 1 ) {
    		return "CD"+ intToRoman( num-400 );
    	}else if( num/100 >= 1 ) {
    		return "C"+ intToRoman( num-100 );
        }else if( num/90 == 1 ) {
    		return "XC"+ intToRoman( num-90 );
    	}else if( num/50 >= 1 ) {
        	return "L"+ intToRoman( num-50 );
    	}else if( num/40 == 1 ) {
    		return "XL"+ intToRoman( num-40 );
    	}else if( num/10 >= 1 ) {
    		return "X"+ intToRoman( num-10 );
    	}else if( num/9 == 1 ) {
    		return "IX"+ intToRoman( num-9 );
    	}else if( num/5 >= 1 ) {
    		return "V"+ intToRoman( num-5 );
    	}else if( num/4 == 1 ) {
    		return "IV"+ intToRoman( num-4 );
    	}else if( num < 4 && num >= 1 ) {
    		return "I"+ intToRoman( num-1 );
    	}else
    		return "";
    }
}
发布了25 篇原创文章 · 获赞 0 · 访问量 122

猜你喜欢

转载自blog.csdn.net/weixin_45980031/article/details/103465980