Integer to Roman
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
tag: string, math
9/28/2015 update
class Solution {
public:
vector<string> roman = {"M", "CM", "D", "CD","C","XC","L","XL" ,"X","IX","V","IV","I"};
vector<int> value = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
string intToRoman(int num) {
string ans;
for(int i = 0; i < 13; i++){
while(num >= value[i]){
ans.append(roman[i]);
num -= value[i];
}
}
return ans;
}
};
给定一个整数,转换为罗马数字。
我用了一堆if判断,特殊的数字有1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1
class Solution {
public:
string intToRoman(int num) {
string s;
while(num >= 1000){
num -= 1000;
s.push_back('M');
}
if(num >= 900){
num -= 900;
s.append("CM");
}
else if(num >= 500){
num -= 500;
s.push_back('D');
}
else if(num >= 400){
num -= 400;
s.append("CD");
}
while(num >= 100){
num -= 100;
s.push_back('C');
}
if(num >= 90){
num -= 90;
s.append("XC");
}
else if(num >= 50){
num -= 50;
s.push_back('L');
}
else if(num >= 40){
num -= 40;
s.append("XL");
}
while(num >= 10){
num -= 10;
s.push_back('X');
}
if(num == 9){
num -= 9;
s.append("IX");
}
else if(num >= 5){
num -= 5;
s.push_back('V');
}
else if (num == 4){
num -= 4;
s.append("IV");
}
while(num > 0){
num--;
s.push_back('I');
}
return s;
}
};
很暴力的做法。有人用了数组来使代码更简洁。
public class Solution {
public String intToRoman(int number) {
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
StringBuilder result = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (number >= values[i]) {
number -= values[i];
result.append(numerals[i]);
}
}
return result.toString();
}
}
