Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
The solution is trivial. Just using greedy method.
C++ Code:
/*
* func: int_to_roman
* goal: change an integer to a roman numeral
* @param num: the input integer
* return: roman numeral string
*/
/*
* use greedy method
*/
string int_to_roman(int num){
if(num < 1 || num > 3999){
throw std::invalid_argument("input number is out of range");
return "";
}
string ret = "";
while(num > 0){
if(num >= 1000){
ret += "M";
num -= 1000;
}else if(num >= 900){
ret += "CM";
num -= 900;
}else if(num >= 500){
ret += "D";
num -= 500;
}else if(num >= 400){
ret += "CD";
num -= 400;
}else if(num >= 100){
ret += "C";
num -= 100;
}else if(num >= 90){
ret += "XC";
num -= 90;
}else if(num >= 50){
ret += "L";
num -= 50;
}else if(num >= 40){
ret += "XL";
num -= 40;
}else if(num >= 10){
ret += "X";
num -= 10;
}else if(num >= 9){
ret += "IX";
num -= 9;
}else if(num >= 5){
ret += "V";
num -= 5;
}else if(num >= 4){
ret += "IV";
num -= 4;
}else if(num >= 1){
ret += "I";
num -= 1;
}
}
return ret;
}
Python Code:
# func: convert the integer to roman numeral
# @param: input integer num
# @return: a roman numeral string
def int_ro_roman(num):
assert 1 <= num <= 3999
ret = ""
while num > 0:
if num >= 1000:
ret += "M"
num -= 1000
elif num >= 900:
ret += "CM"
num -= 900
elif num >= 500:
ret += "D"
num -= 500
elif num >= 400:
ret += "CD"
num -= 400
elif num >= 100:
ret += "C"
num -= 100
elif num >= 90:
ret += "XC"
num -= 90
elif num >= 50:
ret += "L"
num -= 50
elif num >= 40:
ret += "XL"
num -= 40
elif num >= 10:
ret += "X"
num -= 10
elif num >= 9:
ret += "IX"
num -= 9
elif num >= 5:
ret += "V"
num -= 5
elif num >= 4:
ret += "IV"
num -= 4
elif num >= 1:
ret += "I"
num -= 1
return ret
Reference Link:
Roman numerals: http://en.wikipedia.org/wiki/Roman_numerals
No comments:
Post a Comment