This is the First Method of Converting a Decimal Number
entered by the user into its Roman Equivalent. For Method 2, kindly Click Here:
Decimal to Roman Conversion – Method 2
[Note: The number entered should be within the Range
1-3999]
Question:
Write a program in Java to find the Roman equivalent of
any Decimal number entered by the user. [The number entered should be within
the Range 1-3999]
Brief Note on Roman Numerals:
The Roman numerals follow this basic pattern,
1000 = M, 900 = CM, 500 = D, 400 = CD, 100 = C, 90 = XC,
50 = L, 40 = XL, 10 = X, 9 = IX, 5 = V, 4 = IV, 1 = I
The symbols “I”, “X”, “C”, and “M” can be repeated three
times in succession, but no more. i.e. 234 can be represented as CCXXXIV, but
244 cannot be written as CCXXXXIV [Since we cannot repeat X more than 3 times
successively].
(They may only appear more than three times if they
appear non-sequentially, such as XXXIX.) “D”, “L”, and “V” can never be
repeated.
Solution:
/*
[Converting a Decimal Number entered by the user into its
Roman Equivalent - Method 1]
[www.javaforschool.com]
*/
import java.io.*;
class Dec2Roman_Method1
{
public static void main() throws IOException
{
BufferedReader br=new BufferedReader(new
InputStreamReader(System.in));
int num,th,h,t,u;
System.out.print("Enter a Number : ");
num=Integer.parseInt(br.readLine()); //accepting decimal
number
if(num>0 && num<4000) //checking whether
the number is within the range [1-3999]
{
/*Saving Roman equivalent of the thousand, hundred, ten
and units place of a decimal number*/
String
thou[]={"","M","MM","MMM"};
String
hund[]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
String
ten[]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
String
unit[]={"","I","II","III","IV","V","VI","VII","VIII","IX"};
/*Finding the digits in the thousand, hundred, ten and
units place*/
th=num/1000;
h=(num/100)%10;
t=(num/10)%10;
u=num%10;
/*Displaying equivalent roman number*/
System.out.println("Roman Equivalent =
"+thou[th]+hund[h]+ten[t]+unit[u]);
}
/*Displaying an error message if the number entered is
out of range*/
else
System.out.println("\nYou entered a number out of
Range.\nPlease enter a number in the range [1-3999]");
}
}
Output:
Enter a Number : 3482
Roman Equivalent = MMMCDLXXXII
Explanation:
We have solved the above program through the following
steps:
1. First we enter a decimal number and then check whether
it lies in the range [1-3999].
2. If it does not lie in the above range, a proper Error
message is displayed.
3. If it lies within the above range, then we create 4
String Arrays:
● The 1st Array contains the Roman Equivalents of 1000,
2000 and 3000.
● The 2nd Array contains the Roman Equivalents of 100,
200, 300, 400, 500, 600, 700, 800 and 900.
● The 3rd Array contains the Roman Equivalents of 10, 20,
30, 40, 50, 60, 70, 80 and 90.
● The 4th Array contains the Roman Equivalents of 1, 2,
3, 4, 5, 6, 7, 8 and 9.
The 1st value in each of the above Array is “” i.e.
nothing, because we don’t print anything if we get a ‘0’ at either thousand’s,
or hundred’s, or ten’s or unit’s place.
4. We then find the digits present in the thousand’s,
hundred’s, ten’s and unit’s place by using simple mathematical calculations
which are as follows:
Digit at thousand’s place = num/1000;
Digit at hundreds’s place = (num/100)%10;
Digit at ten’s place = (num/10)%10;
Digit at ten’s place = num%10;
5. To get the Roman equivalent of the digit at:
● thousand’s place, we look up the Array thou [ ] at the
index equal to the digit at thousand’s place.
● hundred’s place, we look up the Array hund [ ] at the
index equal to the digit at hundred’s place.
● ten’s place, we look up the Array ten [ ] at the index
equal to the digit at ten’s place.
● unit’s place, we look up the Array unit [ ] at the
index equal to the digit at unit’s place.
6. The result is then displayed together.
That is it – A good example of how array makes life
easier for programmers.
Working:
If the number entered is, num = 3482, then,
Digit at thousand’s place :
th = num/1000;
th = 3482/1000;
th = 3
Digit at hundreds’s place :
h = (num/100)%10;
h = (3482/100)%10;
h = (34%10);
h = 4
Digit at ten’s place :
t = (num/10)%10;
t = (3482/10)%10;
t = (348%10);
t = 8
Digit at ten’s place :
u = num%10;
u = 3482%10;
u = 2
Then we look up the corresponding Arrays,
thou[th] = thou[3] = MMM
hund[h] = hund[4] = CD
ten[t] = ten[8] = LXXX
unit[u] = unit[2] = II
Therefore, printing the value of:
thou[th]+hund[h]+ten[t]+unit[u] gives, MMMCDLXXXII which is the Roman
equivalent of 3482.
No comments:
Post a Comment