タイトル説明
ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています。
文字の値
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
たとえば、ローマ数字2はIIと表記されて2つの平行な数字を意味し、12はXIIと表記されてX + IIを意味します。27はXXVII、つまりXX + V + IIと表記されます。
通常、ローマ数字の小さい数字は大きい数字の右側にあります。ただし、特別な場合があり、たとえば、4はIIIIではなくIVと表記されます。数1は数5の左側にあり、表される数は、数5から数1を引いた数4に等しくなります。同様に、数字9はIXとして表されます。この特別なルールは、次の6つの状況にのみ適用されます。
V(5)とX(10)の左側に配置して、4と9を表すことができます。
XはL(50)とC(100)の左側に配置して、40と90を表すことができます。
Cは、D(500)とM(1000)の左側に配置して、400と900を表すことができます。
整数を指定して、ローマ数字に変換します。入力が1から3999の範囲であることを確認してください。
例1:
入力:3
出力: "III"
例2:
入力:4
出力: "IV"
例3:
入力:9
出力: "IX"
例4:
入力:58
出力: "LVIII"
説明:L = 50、V = 5、III = 3
例5:
入力:1994
出力: "MCMXCIV"
説明:M = 1000、CM = 900、XC = 90、IV = 4。
問題解決のアイデア
タイトルには、1から3999までの4つの数値があると規定されています。
つまり、最大はMMMMであるため、1、10、100、および1000桁が対応する番号に対応する必要があります。
問題解決コード
#include <iostream>
#include <string>
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 solution;
// string string1 = solution.intToRoman(1994);
// cout<<string1;
// return 0;
//}