如何将整数值更改为罗马数字

时间:2013-11-06 13:55:36

标签: java

在计算完两个数字后,如何将整数更改为罗马数字。我无法弄清楚如何将整数值更改为其等效的罗马数值。

import java.util.Scanner;
/**
 * Asks the user to input two numbers along with the "+" sign in roman numerals to  find the sum of the numbers.
 *  
 * @author (Harpreet Singh)
 * Brampton Centennial Secondary School
 * @version (05/11/2013)
 */
public class RomanCalculator
{
    public static int total = 0;
    public static void main(String args[]) 
    {
        Scanner stdIn = new Scanner(System.in);
        System.out.print("Enter a Roman Number:> ");
    char[] roman = stdIn.nextLine().toCharArray();

    for(int i = roman.length-1; i > -1; i--)
    {
        switch(roman[i])
        {
            case 'I':
            total += value(roman[i]); break;
            case 'V':
            case 'X':
            case 'L':
            case 'C':
            case 'D':
            case 'M':
            if(i != 0 && (value(roman[i-1]) < value(roman[i])))
            {
                total += value(roman[i]) - value(roman[i-1]);
                i--;
            }
            else
            {
                total += value(roman[i]);
            }
            break;
        }
    }        

    if (total>1000)
    {
        System.out.println(total);
        System.out.println("ERROR ILLEGAL ENTRY!");
        System.exit(0);
    }
    System.out.println("The Total Is: "+total);
}

public static int value(char c)
{
    switch(c)
    {
        case 'I':
        return 1;
        case 'V':
        return 5;
        case 'X':
        return 10;
        case 'L':
        return 50;
        case 'C':
        return 100;
        case 'D':
        return 500;
        case 'M':
        return 1000;
        default:
        return ' ';
    }
}
}

2 个答案:

答案 0 :(得分:1)

Source这个有用的方法:

public static String IntegerToRomanNumeral(int input)
{
    if (input < 1 || input > 3999)
        throw new InvalidInputException();

    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;
}

答案 1 :(得分:0)

public static int convertRomanNumeral(String roman) {
    String modRoman = roman.replace("CM", "DCCCC");
    modRoman = modRoman.replace("CD", "CCCC");
    modRoman = modRoman.replace("XC", "LXXXX");
    modRoman = modRoman.replace("XL", "XXXX");
    modRoman = modRoman.replace("IX", "VIIII");
    modRoman = modRoman.replace("IV", "IIII");

    Map<Character, Integer> symbols = new HashMap<>();
    symbols.put('M', 1000);
    symbols.put('D', 500);
    symbols.put('C', 100);
    symbols.put('L', 50);
    symbols.put('X', 10);
    symbols.put('V', 5);
    symbols.put('I', 1);

    char[] chars = modRoman.toCharArray();
    int total = 0;
    for (char c : chars) {
        total += symbols.get(c);
    }

    return total;
}

如果您要打电话给我,我会将symbols的初始化移动到它自己的方法,但是将它们全部保存在一个方法中使得在此处发布更简单(恕我直言)。