# leetcode012 整数转罗马数字

HannYang 社区站长 2023-02-27 18:37:26

# 12. 整数转罗马数字

``````字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000``````

• `I` 可以放在 `V` (5) 和 `X` (10) 的左边，来表示 4 和 9。
• `X` 可以放在 `L` (50) 和 `C` (100) 的左边，来表示 40 和 90。
• `C` 可以放在 `D` (500) 和 `M` (1000) 的左边，来表示 400 和 900。

```输入: num = 3

```输入: num = 4

```输入: num = 9

```输入: num = 58

```

```输入: num = 1994

```

• `1 <= num <= 3999`

``````#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
string getNum1000(int num1000)
{
if (num1000 == 3)
{
return "MMM";
}
else if (num1000 == 2)
{
return "MM";
}
else if (num1000 == 1)
{
return "M";
}
else
{
return "";
}
}

string getNum100(int num100)
{

switch (num100)
{
case 1:
return "C";
case 2:
return "CC";
case 3:
return "CCC";
case 4:
return "CD";
case 5:
return "D";
case 6:
return "DC";
case 7:
return "DCC";
case 8:
return "DCCC";
case 9:
return "CM";
default:
return "";
}
}

string getNum10(int num10)
{

switch (num10)
{
case 1:
return "X";
case 2:
return "XX";
case 3:
return "XXX";
case 4:
return "XL";
case 5:
return "L";
case 6:
return "LX";
case 7:
return "LXX";
case 8:
return "LXXX";
case 9:
return "XC";
default:
return "";
}
}

string getNum1(int num1)
{
switch (num1)
{
case 1:
return "I";
case 2:
return "II";
case 3:
return "III";
case 4:
return "IV";
case 5:
return "V";
case 6:
return "VI";
case 7:
return "VII";
case 8:
return "VIII";
case 9:
return "IX";
default:
return "";
}
}

string intToRoman(int num)
{
int num1000 = num / 1000;
int num100 = (num % 1000) / 100;
int num10 = (num % 100) / 10;
int num1 = (num % 10);
string res;
res = getNum1000(num1000) + getNum100(num100) + getNum10(num10) + getNum1(num1);
return res;
}
};

int main()
{
Solution s;
vector<int> nums = {3,4,9,58,1994};

for(auto num:nums)
cout << s.intToRoman(num) << endl;

return 0;
} ``````

``````#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
string intToRoman(int num)
{
int values[13] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
string reps[13] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
string res;
for (int i = 0; i < 13; i++)
{
while (num >= values[i])
{
num -= values[i];
res += reps[i];
}
}
return res;
}
};

int main()
{
Solution s;
vector<int> nums = {3,4,9,58,1994};

for(auto num:nums)
cout << s.intToRoman(num) << endl;

return 0;
} ``````

``````#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
string intToRoman(int num)
{
string bit1[10] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
string bit10[10] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
string bit100[10] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
string bit1000[4] = {"", "M", "MM", "MMM"};
return bit1000[num / 1000] + bit100[num % 1000 / 100] + bit10[num % 100 / 10] + bit1[num % 10];
}
};

int main()
{
Solution s;
vector<int> nums = {3,4,9,58,1994};

for(auto num:nums)
cout << s.intToRoman(num) << endl;

return 0;
} ``````

...全文
5 回复 打赏 收藏 举报

1048

【派森特给站】也就是PythonTogether，让我们来一起学习Python吧！但我们这个bbs小站可以发任何语言的帖子，包括但不限于Python, C/C++, Java, ...什么都可以讨论。

2023-02-27 18:37