Skip to content

Instantly share code, notes, and snippets.

@aadipoddar
Created February 12, 2022 07:12
Show Gist options
  • Save aadipoddar/e5073b35675cdc1cc6eb5008c83a7a32 to your computer and use it in GitHub Desktop.
Save aadipoddar/e5073b35675cdc1cc6eb5008c83a7a32 to your computer and use it in GitHub Desktop.
Convert Roman to Integer and Vice Versa
/*
Write a program to accept a number whuch is less than 50 and convert it into ROMAN form and vice versa.
Eg:
INPUT: 34
OUTPUT: XXXIV
INPUT: 50
OUTPUT: Out of range
INPUT: XXXVI
OUTPUT: 36
*/
import java.util.Scanner;
class RomanConvertor {
private boolean isRoman(String input) {
String wordArray[] = new String[input.length()];
for (int i = 0; i < input.length(); i++)
wordArray[i] = input.substring(i, i + 1);
for (int i = 0; i < wordArray.length; i++) {
if (wordArray[i].equals("I") || wordArray[i].equals("V") || wordArray[i].equals("X"))
continue;
else
return false;
}
return true;
}
private int convertToNumber(String str) {
int number = 0;
int i = 0;
while (i < str.length()) {
if (str.charAt(i) == 'I') {
if (i + 1 < str.length() && str.charAt(i + 1) == 'V') {
number += 4;
i += 2;
} else if (i + 1 < str.length() && str.charAt(i + 1) == 'X') {
number += 9;
i += 2;
} else {
number += 1;
i++;
}
}
else if (str.charAt(i) == 'V') {
number += 5;
i++;
}
else if (str.charAt(i) == 'X') {
number += 10;
i++;
}
else
continue;
}
return number;
}
private String convertToRoman(int number) {
String roman = "";
while (number >= 10) {
roman += "X";
number -= 10;
}
if (number == 9) {
roman += "IX";
number -= 9;
}
while (number >= 5) {
roman += "V";
number -= 5;
}
if (number == 4) {
roman += "IV";
number -= 4;
}
while (number >= 1 && number < 4) {
roman += "I";
number -= 1;
}
return roman;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the Number or Roman form");
String str = sc.nextLine();
str = str.toUpperCase();
RomanConvertor obj = new RomanConvertor();
if (obj.isRoman(str))
System.out.println(obj.convertToNumber(str));
else {
int number = Integer.parseInt(str);
if (number >= 50 || number < 1)
System.out.println("Out of range");
else
System.out.println(obj.convertToRoman(number));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment