0

i want to convert integer to roman numeral. As we know, format for roman numeral is like this:

  • 1 = I
  • 5 = V
  • 10 = X
  • 50 = L
  • 100 = C
  • 500 = D
  • 1000 = M

For example, if we have number 497, it will be CDXCVII.

In Java, i know we can use Switch Case for the condition. Is there any idea to implement this in apex?

  • as switch-case is not supported in Apex, replace it with if-else condition for java algorithm – Oleksandr Berehovskyi Nov 29 '17 at 9:53
  • Hi @AlexanderBerehovskiy, i see.. when i try to use code from comment section, it will be good if using While. Btw thanks for your comment. – Enriko Nov 29 '17 at 10:37
0

I don't think there is any native functionality to implement this. So you need to write custom logic to implement this. As Java and Apex share similar code concept so you can take help from there

public static String IntegerToRomanNumeral(int input) {
    if (input < 1 || input > 3999)
        return "Invalid Roman Number Value";
    String s = "";
    while (input >= 1000) {
        s += "M";
        input -= 1000;        }
    while (input >= 900) {
        s += "CM";
        input -= 900;
    }
    while (input >= 500) {
        s += "D";
        input -= 500;
    }
    while (input >= 400) {
        s += "CD";
        input -= 400;
    }
    while (input >= 100) {
        s += "C";
        input -= 100;
    }
    while (input >= 90) {
        s += "XC";
        input -= 90;
    }
    while (input >= 50) {
        s += "L";
        input -= 50;
    }
    while (input >= 40) {
        s += "XL";
        input -= 40;
    }
    while (input >= 10) {
        s += "X";
        input -= 10;
    }
    while (input >= 9) {
        s += "IX";
        input -= 9;
    }
    while (input >= 5) {
        s += "V";
        input -= 5;
    }
    while (input >= 4) {
        s += "IV";
        input -= 4;
    }
    while (input >= 1) {
        s += "I";
        input -= 1;
    }    
    return s;
}

Converting Integers to Roman Numerals - Java

| improve this answer | |
  • 1
    Thanks a lot bro!! I try using this code and modify some part and BOOM its working :D. – Enriko Nov 29 '17 at 10:37
1

Represent the number with just I, and then we replace the characters in ascending value of the roman characters.

String intToRoam(integer Num){
  return  'I'.repeat(Num)
            .replace('IIIII', 'V')
            .replace('IIII', 'IV')
            .replace('VV', 'X')
            .replace('VIV', 'IX')
            .replace('XXXXX', 'L')
            .replace('XXXX', 'XL')
            .replace('LL', 'C')
            .replace('LXL', 'XC')
            .replace('CCCCC', 'D')
            .replace('CCCC', 'CD')
            .replace('DD', 'M')
            .replace('DCD', 'CM');
}

system.debug('Romanstr ' + intToRoam(497));
| improve this answer | |
  • 1
    Thanks for answer, interesting, i will try to use this concept. – Enriko Nov 29 '17 at 10:39
  • @Enriko You are Welcome.... – NITHESH K Nov 29 '17 at 11:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.