string decimalToRoman( int n ){
    if(n<4) return string(n,'I');
    if(n<6) return string(5-n,'I')+"V";
    if(n<9) return "V"+string(n-5,'I');
    if(n<11) return string(10-n,'I')+"X";
    if(n<40) return string(n/10,'X')+decimalToRoman(n%10);
    if(n<60) return string(5-n/10,'X')+'L'+decimalToRoman(n%10);
    if(n<90) return "L"+string(n/10-5,'X')+decimalToRoman(n%10);
    if(n<110) return string(10-n/10,'X')+"C"+decimalToRoman(n%10);
    if(n<400) return string(n/100,'C')+decimalToRoman(n%100);
    if(n<600) return string(5-n/100,'C')+'D'+decimalToRoman(n%100);
    if(n<900) return "D"+string(n/100-5,'C')+decimalToRoman(n%100);
    if(n<1100) return string(10-n/100,'C')+"M"+decimalToRoman(n%100);
    return string(n/1000,'M')+decimalToRoman(n%1000);
}
예제 #2
0
파일: main.cpp 프로젝트: CCJY/coliru
int main() {
    std::cout << "--- roman(27): " << decimalToRoman(27) << std::endl; 
    return 0;
}