您的位置:首页 > 其它

【leetcode】Integer to Roman

2013-04-21 20:28 579 查看
最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--

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]);
}
}
};

文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: