summary:
classified discussion
package myapp.kit.leetcode.top200;
/**
* 12
* medium
* https://leetcode.com/problems/integer-to-roman/
*
* Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
*
* Symbol Value
* I 1
* V 5
* X 10
* L 50
* C 100
* D 500
* M 1000
* For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII,
* which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.
*
* Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII.
* Instead, the number four is written as IV. Because the one is before the five we subtract it making four.
* The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
*
* I can be placed before V (5) and X (10) to make 4 and 9.
* X can be placed before L (50) and C (100) to make 40 and 90.
* C can be placed before D (500) and M (1000) to make 400 and 900.
* Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.
*
* Example 1:
*
* Input: 3
* Output: "III"
* Example 2:
*
* Input: 4
* Output: "IV"
* Example 3:
*
* Input: 9
* Output: "IX"
* Example 4:
*
* Input: 58
* Output: "LVIII"
* Explanation: L = 50, V = 5, III = 3.
* Example 5:
*
* Input: 1994
* Output: "MCMXCIV"
* Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
*
*
*
* @author huangdingsheng
* @version 1.0, 2020/6/22
*/
public class IntegerToRoman_12 {
public static String intToRoman(int num) {
StringBuilder sb = new StringBuilder();
int x1 = num / 1000;
int x2 = (num - x1 * 1000) / 100;
int x3 = (num - x1 * 1000 - x2 * 100) / 10;
int x4 = (num - x1 * 1000 - x2 * 100 - x3 * 10) / 1;
if (x1 > 0) {
for (int i = 0; i < x1; i++) {
sb.append("M");
}
}
if (x2 > 0) {
if (x2 == 9) {
sb.append("CM");
}
if (x2 >= 5 && x2 < 9) {
sb.append("D");
for (int i = 0; i < x2 - 5; i++) {
sb.append("C");
}
}
if (x2 < 5) {
if (x2 == 4) {
sb.append("CD");
}
if (x2 < 4) {
for (int i = 0; i < x2; i++) {
sb.append("C");
}
}
}
}
if (x3 > 0) {
if (x3 == 9) {
sb.append("XC");
}
if (x3 >= 5 && x3 < 9) {
sb.append("L");
for (int i = 0; i < x3 - 5; i++) {
sb.append("X");
}
}
if (x3 < 5) {
if (x3 == 4) {
sb.append("XL");
}
if (x3 < 4) {
for (int i = 0; i < x3; i++) {
sb.append("X");
}
}
}
}
if (x4 > 0) {
if (x4 == 9) {
sb.append("IX");
}
if (x4 >= 5 && x4 < 9) {
sb.append("V");
for (int i = 0; i < x4 - 5; i++) {
sb.append("I");
}
}
if (x4 < 5) {
if (x4 == 4) {
sb.append("IV");
}
if (x4 < 4) {
for (int i = 0; i < x4; i++) {
sb.append("I");
}
}
}
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(intToRoman(100));
}
}