Saturday, April 20, 2013

Integer to Roman

Given an integer, convert it to a roman numeral.


Roman Numerals, as used today, are based on seven symbols:[1]
SymbolValue
I1
V5
X10
L50
C100
D500
M1,000


[解题思路]
按照区间处理digit:
digit <=3
digit =4
5<=digit<=8
digit =9

code:

public class IntegerToRoman {
    public String intToRoman(int num) {
        StringBuffer buffer = new StringBuffer();
        char[] roman = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
        int divide = 1000;
        
        for(int i = 0; i <= 3; i++){
            int d = num / divide;
            num %= divide;
            
            if(d <= 3){
                append(buffer, roman, i*2, d);
            }
            else if(d == 4){
                append(buffer, roman, i*2, 1);
                append(buffer, roman, i*2-1, 1);
            }
            else if(d <= 8){
                append(buffer, roman, i*2-1, 1);
                append(buffer, roman, i*2, d - 5);
            }
            else{
                append(buffer, roman, i*2, 1);
                append(buffer, roman, (i - 1)*2, 1);
            }
            divide /= 10;
        }
        return new String(buffer);
    }
    
    public void append(StringBuffer buffer, char[] roman, int i, int d){
        for(int j = 0; j < d; j++){
            buffer.append(roman[i]);
        }
    }
}

No comments:

Post a Comment