个位数举例
I, 1 】II, 2】 III, 3】 IV, 4 】V, 5 】VI, 6】 VII, 7】 VIII,8 】IX, 9
·十位数举例
X, 10】 XI, 11 】XII, 12】 XIII, 13】 XIV, 14】 XV, 15 】XVI, 16 】XVII, 17 】XVIII, 18】 XIX, 19】 XX, 20】 XXI, 21 】XXII, 22 】XXIX, 29】 XXX, 30】 XXXIV, 34】 XXXV, 35 】XXXIX, 39】 XL, 40】 L, 50 】LI, 51】 LV, 55】 LX, 60】 LXV, 65】 LXXX, 80】 XC, 90 】XCIII, 93】 XCV, 95 】XCVIII, 98】 XCIX, 99 】
·百位数举例
C, 100】 CC, 200 】CCC, 300 】CD, 400】 D, 500 】DC,600 】DCC, 700】 DCCC, 800 】CM, 900】 CMXCIX,999】
·千位数举例
M, 1000】 MC, 1100 】MCD, 1400 】MD, 1500 】MDC, 1600 】MDCLXVI, 1666】 MDCCCLXXXVIII, 1888 】MDCCCXCIX, 1899 】MCM, 1900 】MCMLXXVI, 1976】 MCMLXXXIV, 1984】 MCMXC, 1990 】MM, 2000 】MMMCMXCIX, 3999】
// LeetCodeIntegertoRoman.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <map>
using namespace std;
string intToRoman(int num) {
map<int,string> mp;
mp[1]="I";
mp[5]="V";
mp[10]="X";
mp[50]="L";
mp[100]="C";
mp[500]="D";
mp[1000]="M";
string ret="";
int unit=1000;
while(unit)
{
int digital=num/unit;
if (digital!=0)
{
if (digital<=3)
{
while(digital!=0)
{
ret += mp[unit];
digital--;
}
}
else
{
if (digital==4)
{
ret += mp[unit];
ret += mp[(digital+1)*unit];
}
else
{
if (digital>=5&&digital<=8)
{
ret += mp[5*unit];
while(digital>5)
{
ret += mp[unit];
digital--;
}
}
else
{
ret += mp[unit];
ret += mp[10*unit];
}
}
}
}
num %= unit;
unit /= 10;
}
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a;
while(cin>>a)
{
string str=intToRoman(a);
cout<<str.c_str()<<endl;
}
system("pause");
return 0;
}