128 lines
2.2 KiB
Java
128 lines
2.2 KiB
Java
import java.util.Scanner;
|
|
/**
|
|
* Roman numerals
|
|
* I 1
|
|
* V 5
|
|
* X 10
|
|
* L 50
|
|
* C 100
|
|
* D 500
|
|
* M 1000
|
|
*
|
|
* Numbers are written in decreasing value
|
|
* Example: XII is 12, not IIX or IXI
|
|
*
|
|
* But there are special rules:
|
|
* I can come before V or X IV = 4, IX = 9
|
|
* X can come before L or C XL = 40, XC = 90
|
|
* C can come before D or M CD = 400 CM = 900
|
|
*/
|
|
public class Roman {
|
|
|
|
public static String intToRoman(int n) {
|
|
String ret = "";
|
|
int val = n;
|
|
// dealing with the thousands case
|
|
if(n > 1000) {
|
|
int m = val / 1000;
|
|
for(int i =0;i<m;i++) {
|
|
ret += "M";
|
|
val -= 1000;
|
|
}
|
|
}
|
|
// 900 case
|
|
if(val>=900) {
|
|
ret += "CM";
|
|
val -= 900;
|
|
}
|
|
// 600-800 range
|
|
if(val>=600) {
|
|
int c = (val - 500)/100;
|
|
for(int i =0;i<c;i++) {
|
|
ret += "C";
|
|
}
|
|
val -= 500;
|
|
}
|
|
// special case 500
|
|
if(val>=500) {
|
|
ret += "D";
|
|
val -= 500;
|
|
}
|
|
// 400 special case
|
|
if(val>=400) {
|
|
ret +="CD";
|
|
val -= 400;
|
|
}
|
|
// 100 - 300 range
|
|
if(val>=100) {
|
|
int x = (val - 100)/100;
|
|
for(int i =0;i<x;i++) {
|
|
ret += "X";
|
|
}
|
|
val -= 100;
|
|
}
|
|
// sub 100 range now
|
|
// 90 special case first
|
|
if(val>=90) {
|
|
val -=90;
|
|
ret += "XC";
|
|
}
|
|
if(val>=50) {
|
|
ret += "L";
|
|
int L=(val-50)/10;
|
|
|
|
for(int i =0;i<L;i++) {
|
|
ret += "X";
|
|
}
|
|
val -= 50;
|
|
}
|
|
if(val>=40) {
|
|
ret += "XL";
|
|
val -= 40;
|
|
}
|
|
if(val>=10) {
|
|
int x = (val - 10)/10;
|
|
for(int i =0;i<x;i++) {
|
|
ret += "X";
|
|
}
|
|
val -= 10;
|
|
}
|
|
if(val==9) {
|
|
ret += "IX";
|
|
return ret;
|
|
}
|
|
if(val>5){
|
|
int c = (val - 5);
|
|
for(int i =0;i<c;i++) {
|
|
ret += "I";
|
|
}
|
|
val -=5;
|
|
}
|
|
if(val==5) {
|
|
ret += "V";
|
|
return ret;
|
|
}
|
|
if(val==4) {
|
|
ret += "IV";
|
|
return ret;
|
|
}
|
|
return ret;
|
|
|
|
}
|
|
public static void main(String[] args) {
|
|
Scanner in = new Scanner(System.in);
|
|
while (true) {
|
|
System.out.print("Enter Roman Number or q for quit. ");
|
|
String x = in.nextLine();
|
|
if (x.equals("q"))
|
|
return;
|
|
|
|
// now we deal with normal cases
|
|
int n = Integer.parseInt(x);
|
|
System.out.println(n + " : " + intToRoman(n));
|
|
}
|
|
|
|
}
|
|
|
|
}
|