タイトル
整数を考えると、ローマ数字に変換します。入力は1から3999までの範囲内にあることが保証されています。
考え
考慮ローマ数字整数との変換関係:
Symol |値
: - :| - :
I | 1。
V | 5。
X- | 10
L | 50
C | 100
D | 500
M | 1000の
ローマ数字は、一般に、左下降に追従数値の表現に加算され、文字の右に順に配置されました。しかし、整数、注意4
ローマ数字ではないIIII
、しかしIV
。デジタルように、まだ9,40などが挙げられます。その後、ローマ数字と整数変換テーブルを確立するために、再考:
Symol |値
: - :| - :
。I | 1
。IV | 4
。V | 5
。IX | 9
X- | 10
XL | 40
L | 50
XC | 90
C | 100
CD | 400
D | 500
CM | 900
M | 1000年
、すべての場合においてシンボルを含む、NUMテーブルに番号を見つけます:
- 数xを見つけるために、テーブルに値がNUMよりも大きくありません
- 対応する出力に応じて記号文字、およびNUM-X
- 2 NUM 0までループ動作を行います
C ++
string intToRoman(int num) {
string resStr = "";
vector<int> value{1000,900,500,400,100,90,50,40,10,9,5,4,1};
vector<string> symbol{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for(int i=0;i<value.size();i++)
while(num>=value[i])
{
resStr+=symbol[i];
num-=value[i];
}
return resStr;
}
パイソン
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
intList = [1000,900,500,400,100,90,50,40,10,9,5,4,1]
strList = ['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I']
resStr = ''
i = 0
count = 0
while num > 0:
count = num/intList[i]
num %= intList[i]
while count > 0:
resStr += strList[i]
count -= 1
i += 1
return resStr