x
Solved

# How to convert decimal number to roman number in Java

Posted on 2001-08-10
Medium Priority
1,609 Views
Hi all,

I want to know how to convert decimal number to roman number and vice-versa.

manohar.

0
Question by:manu_gmr
• 2

LVL 2

Accepted Solution

DidierD earned 100 total points
ID: 6379209
public class Int2Rom {

/* here goes control arrays for roman numerals */

/* let: char symbols for each value */

static char[] let = { 'I', 'V', 'X', 'L' };

/* min: the idea of this array is to determine, how
* long can we use this numeral, even if value is less
* then numeral value. e.g. if int==8, then numeral
* will be 'X'-2, i.e. IIX
*/

static int[]  min = { 0, 1, 2, 2 };

/* val: values for numerals */

static int[]  val = { 1, 5, 10, 50 };

/* ref: references to numbers we can substract.
* For 'L' we can substract only 'X', for 'X' and 'V'
* we can substract only 'I's
*/

static int[]  ref = { 0, 0, 0, 2 };

/* values: last index in arrays */

static int values = 3;

static void usage() {
System.out.println("Usage: java Int2Rom integer_number");
System.exit(1);
}

public static void main(String args[]) {

int arg = 0;

if (args.length < 1) {
usage();
}

try {
arg = Integer.parseInt(args[0]);
} catch (Exception e) {
usage();
}

String result = process(arg);

System.out.println("Integer = "+arg+", Roman = "+result);
System.exit(0);

}

static String process(int x) {

int cval = values; // set index to the last one.
String res = new String(""); // create empty string

while (cval >= 0) { // up to all values

// this while{} will work if we can print let[cval]

while (x >= (val[cval]-(min[cval]*val[ref[cval]]))) {

System.err.println("x="+x+",max="+
(val[cval]-(min[cval]*val[ref[cval]]))+

int recall = 0;

System.err.println("Prepare loop: "+
"lmt="+(val[cval]-x)+", step="+val[ref[cval]]);

// this loop will only work if the original value
// was less than numeral value.

for (int i=0; i<(val[cval]-x);i+=val[ref[cval]]) {
System.err.println("Incomplete "+(-i+val[cval]-x)+", do"+
recall++;
}

// this line reduce original value on the value we

x -= (val[cval]-(recall*val[ref[cval]]));
}

cval--;

}

return res;

}

/* this method adds character to the end of sourse string */

static String addRight(String orig, char c) {

String res = orig.concat(String.valueOf(c));
return res;

}

/* this method inserts character before last character of the
* source string */

static String addLeft(String orig, char c) {

char last = orig.charAt(orig.length()-1);

System.err.print("aL: last="+last);

String res = orig.substring(0,orig.length()-1);

System.err.print(", lside="+res+", concat=>"+c+"< and >"+last+"<");

res = (res.concat(String.valueOf(c))).concat(String.valueOf(last));

System.err.println(", fin="+res);

return res;

}

}

0

LVL 2

Expert Comment

ID: 6379238
Hi,

For converting from roman to decimal number see at http://java.oreilly.com/bite-size/java_0698.html

Didier
0

Expert Comment

ID: 9061888
manu_gmr:
EXPERTS:
Post your closing recommendations!  No comment means you don't care.
0

LVL 20

Expert Comment

ID: 9330076
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:

- Points for DidierD

Venabili
EE Cleanup Volunteer
0

## Featured Post

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.