Question :
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
Anwser 1 :
class Solution {
public:
string intToRoman(int num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
string res;
string symbol[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int value[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
int i = 0;
while(num != 0){
if(num >= value[i]){ // minus largest number
num -= value[i];
res += symbol[i];
} else {
i++;
}
}
return res;
}
};
Anwser 2 :
class Solution {
public:
string intToRoman(int num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
char symbol[7] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
string res = "";
int scale = 1000;
for (int i = 6; i >= 0; i -= 2)
{
int digit = num / scale;
num2roman(digit, res, symbol + i);
num %= scale;
scale /= 10;
}
return res;
}
void num2roman(int num, string& res, char symbols[])
{
if (num == 0)
return;
if (num <= 3)
res.append(num, symbols[0]);
else if (num == 4)
{
res.append(1, symbols[0]);
res.append(1, symbols[1]);
}
else if (num <= 8)
{
res.append(1, symbols[1]);
res.append(num - 5, symbols[0]);
}
else
{
res.append(1, symbols[0]);
res.append(1, symbols[2]);
}
}
};