| |
| - |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
| (10) |
| 2, 3, 4, 5, 6, 7, 8, 9, 12, 16, 60 |
| - |
| |
| () |
| |
, .
. , , ( ), , ( ). .
500 .
[]
| 1 |
I |
. unus |
| 5 |
V |
. quinque |
| 10 |
X |
. decem |
| 50 |
L |
. quinquaginta |
| 100 |
C |
. centum |
| 500 |
D |
. quingenti |
| 1000 |
M |
. mille |
:
D L, V I.
M D C L X V I
M, D, C, L, X, V, I
[]
|
|
|
| 0 |
- |
|
| 4 |
IV |
XIX IIII |
| 8 |
VIII |
|
| 9 |
IX |
|
| 31 |
XXXI |
|
| 46 |
XLVI |
|
| 99 |
XCIX |
|
| 583 |
DLXXXIII |
|
| 888 |
DCCCLXXXVIII |
1 1000 |
| 1668 |
MDCLXVIII |
|
| 1989 |
MCMLXXXIX |
|
| 2010 |
MMX |
|
| 2011 |
MMXI |
|
| 2012 |
MMXII |
|
| 3999 |
MMMCMXCIX |
|
| 5000 |
|
|
| 10 000 |
|
|
, , , , .
(I, X, C, M) , , 3999 (MMMCMXCIX). ́ 5000, 10 000, 50 000 100 000[ 464 ] ( 399 999). ; . , 283 - CCLXXXIII, 200+50+30+3=283. , , , , , .
: 1988. M, CM, LXXX, VIII. : MCMLXXXVIII.
, , : LXIV. , : XXXII , ( - ). 1000 : VM = 6000.
«» «IV» XIX , «IIII». «IV» «Forme of Cury», 1390 . «IIII» «IV», , : «VIII» , «IV» , «IIII».
, . . - 94 XCIV=100-10+5-1=94 « » ( , 4 IIII, 40 XXXX). « »:
- IV = 4
- IX = 9
- XL = 40
- XC = 90
- CD = 400
- CM = 900
, «» ; , 99 XCIX, IC. , : , Microsoft Excel «()» , (, 499 CDXCIX, LDVLIV, XDIX, VDIV ID). , - :
- 999. (M), 1 (I), 999 (IM) CMXCIX. : 1999 MIM MCMXCIX
- 95. (C), 5 (V), 95 (VC) XCV
- 1950: (M), 50 (L), 950 (LM). : 1950 MLM MCML
. , , , , , . , 123123 :
CXXIIICXXIII
I, , : I
[]
:
- : XIX , II . .
- : V, II.
- ( , ).
- , .
- « ».
- , : V , II , XX , XXII . .
- .
- .
: 11/III-85 9.XI.89. , . , , .
, , .
:
| № |
I |
I |
I |
I |
V |
I |
I |
I |
I |
X |
I |
I |
I |
I |
V |
I |
I |
I |
I |
X |
I |
I |
I |
I |
V |
I |
I |
I |
I |
X |
I |
I |
I |
I |
V |
I |
I |
I |
I |
X |
I |
I |
I |
I |
V |
I |
I |
I |
I |
L |
|
| 1 |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
I |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
|
|
|
I |
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
|
|
|
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
|
|
|
V |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
|
|
|
|
V |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
|
|
|
V |
I |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
|
|
|
|
|
|
|
I |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
|
|
|
|
|
|
|
|
|
X |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
|
|
|
|
|
|
|
|
X |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
|
|
|
|
|
|
|
|
X |
I |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
I |
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
I |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
I |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
I |
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
I |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
I |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
I |
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
V |
I |
I |
I |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
I |
X |
|
|
|
|
|
|
|
|
|
L |
!39 (old XLIX) |
| 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
L |
|
| 41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
I |
|
|
|
|
|
|
|
|
L |
!not XLI |
| 42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
I |
I |
|
|
|
|
|
|
|
L |
!not XLII |
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
I |
I |
I |
|
|
|
|
|
|
L |
!not XLIII |
| 44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
? |
|
|
|
I |
V |
|
|
|
|
L |
|
| 45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
? |
|
|
|
|
V |
|
|
|
|
L |
|
| 46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
? |
|
|
|
|
V |
I |
|
|
|
L |
!not VLI |
| 47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
? |
|
|
|
|
V |
I |
I |
|
|
L |
!not VLII |
| 48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
? |
|
|
|
|
V |
I |
I |
I |
|
L |
!not VLIII |
| 49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
? |
|
|
|
|
|
|
|
|
I |
L |
|
| 50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
L |
up to MMMDCCCLXXXVIII (3888) |
[]
.[1] (. Number Forms)[2] U+2160 U+2188. , MCMLXXXVIII ⅯⅭⅯⅩⅩⅩⅧ. , 1 (Ⅰ I) 12 (Ⅻ XII), , 8 (Ⅷ VIII), , JIS X 0213, . , (, Ⅻ Ⅹ ). , [2] 1000, 5000, 10 000, C (Ɔ), 6 (, : Ϛ), 50 (, , [3]), 50 000, 100 000. , c, , .
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
| [4] |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
50 |
100 |
500 |
1 000 |
| U+2160 |
Ⅰ
2160 |
2161 |
2162 |
Ⅳ
2163 |
2164 |
2165 |
2166 |
Ⅷ
2167 |
Ⅸ
2168 |
Ⅹ
2169 |
216A |
Ⅻ
216B |
216C |
Ⅽ
216D |
Ⅾ
216E |
Ⅿ
216F |
| U+2170 |
2170 |
2171 |
ⅲ
2172 |
ⅳ
2173 |
ⅴ
2174 |
ⅵ
2175 |
ⅶ
2176 |
2177 |
ⅸ
2178 |
ⅹ
2179 |
217A |
ⅻ
217B |
ⅼ
217C |
ⅽ
217D |
ⅾ
217E |
ⅿ
217F |
|
1 000 |
5 000 |
10 000 |
- |
- |
6 |
50 |
50 000 |
100 000 |
| U+2160! U+2180 |
2180 |
2181 |
2182 |
|
|
|
|
|
|
, , , .
[]
'^(?i)M{0,3}(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$'. Perl 'm/((?i)M{0,3}(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(I[VX]|V?I{0,3}))/g'.
[]
, , , . , Microsoft Excel (), Microsoft Excel OpenOffice.org Calc ROMAN().
JavaScript
var arab = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000];
var roman = ['I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M'];
function arabToRoman(number)
{
if(!number) return '';
var ret = '';
var i = arab.length - 1;
while(number > 0)
{
if(number >= arab[i])
{
ret += roman[i];
number -= arab[i];
}
else
{
i--;
}
}
return ret;
}
function romanToArab(str)
{
str = str.toUpperCase();
var ret = 0;
var i = arab.length - 1;
var pos = 0;
while(i >= 0 && pos < str.length )
{
if(str.substr(pos, roman[i].length) == roman[i])
{
ret += arab[i];
pos += roman[i].length;
}
else
{
i--;
}
}
return ret;
}
(C89):
#include <string.h>
const int arabar[] = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
const char *romanar[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
char *arab2roman(unsigned short int arab) {
static char roman[80];
const int m = sizeof(arabar)/sizeof(int)-1, arabmax=arabar[m];
const char romanmax=romanar[m][0];
int i, n;
if(!arab) {
*roman=0;
return roman;
}
i=0;
while(arab>arabmax) {
roman[i++] = romanmax;
arab -= arabmax;
}
n=m;
while(arab > 0) {
if(arab >= arabar[n]) {
roman[i++] = romanar[n][0];
if(n&1)
roman[i++] = romanar[n][1];
arab -= arabar[n];
} else
n--;
}
roman[i]=0;
return roman;
}
unsigned short int roman2arab(char *roman) {
const int m = sizeof(arabar)/sizeof(int)-1;
unsigned short int arab;
int len, n, i, pir;
len=strlen(roman);
arab=0;
n=m;
i=0;
while(n >= 0 && i < len) {
pir=n&1;
if(roman[i] == romanar[n][0] && (!pir || roman[i+1] == romanar[n][1])) {
arab += arabar[n];
i += 1+pir;
} else
n--;
}
return arab;
}
type str2 = string[2];
const
Rims : array[1..14] of str2 = ('M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I',' ');
Arab : array[1..14] of integer = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1, 0);
var
N, NI, I, J : integer;
S : string;
function Arab2Rim(N : integer) : string;
var S : string;
I : integer;
begin
S := ''; I:=1;
while N > 0 do begin
while Arab[I]<=N do begin
S := S + Rims[I];
N := N - Arab[I]
end;
I:=I+1
end;
Arab2Rim := S
end;
function Rim2Arab (S:string) : integer;
var I, N : integer;
begin
I:=1; N := 0;
while S<>'' do begin
while Rims[I] = Copy(S, 1, Length(Rims[I]) ) do begin
S := Copy( S, 1+Length(Rims[I]), 255);
N := N + Arab[I]
end;
I:=I+1
end;
Rim2Arab := N
end;
begin
WriteLn(' . 1999 B_SA');
{ Write(' :'); ReadLn(N);}
for NI := 26 to 46 do
WriteLn(NI,' = ',Arab2Rim(NI),' ', Rim2Arab( Arab2Rim(NI) ));
end.
function Arab2Roman(arab:integer):string;
var
i:integer;
d:integer;
arab_str:string;
arab_len:integer;
begin
Result := '';
arab_str := IntToStr(arab);
arab_len := Length(arab_str);
for i := 0 to arab_len-1 do begin
d := StrToInt(String(arab_str[arab_len-i]));
if (d+1) mod 5 = 0 then
Result := Copy('IXCM', 1+i, 1) + Copy('VXLCDM', i*2 + (d+1) div 5, 1) + Result
else
Result := Copy('VLD', 1+i, d div 5) + Copy('IIIXXXCCCMMM', 1+i*3, d mod 5) + Result;
end;
end;
, (, , ).
10 INPUT " : "; $
20 FOR I=0 TO LEN(A$)-1
30 X=VAL(MID$(A$,LEN(A$)-I,1))
40 IF X=4 OR X=9 THEN B$=MID$("IXCM",I+1,1)+MID$("VXLCDM",I*2+(X+1)/5,1)+B$
50 IF X<4 THEN B$=MID$("IIIXXXCCCMMM",1+I*3,X)+B$
ELSE IF X>4 AND X<9 THEN B$=MID$("VLD",I+1,1)+MID$("IIIXXXCCCMMM",1+I*3,X-5)+B$
60 NEXT I
70 PRINT " : "; B$
string-join(
for $num in (1999)
return (
('','M','MM','MMM')[($num idiv 1000) mod 10+1],
('','C','CC','CCC','CD','D','DC','DCC','DCCC','CM')[($num idiv 100) mod 10+1],
('','X','XX','XXX','XL','L','LX','LXX','LXXX','XC')[($num idiv 10) mod 10+1],
('','I','II','III','IV','V','VI','VII','VIII','IX')[$num mod 10+1]
),
'')
use strict;
use warnings;
my $n = 1999;
my $nums = [
['', qw(I II III IV V VI VII VIII IX) ],
['', qw(X XX XXX XL L LX LXX LXXX XC) ],
['', qw(C CC CCC CD D DC DCC DCCC CM) ],
['', qw(M MM MMM) ]
];
my $i = 0; my @res = ();
push @res, ($nums->[$i++][ ($n % 10, $n = int($n / 10))[0] ]) for 0 .. 3;
print reverse @res;
class ArabRome {
private int[] arabBase = {1000, 500, 100, 50, 10, 5, 1};
private String[] romeBase = {"M", "D", "C", "L", "X", "V", "I"};
public String ArabToRome(int arab) {
int result = 0;
int remainder = 0;
String resultRome = "";
for(short i = 0; i<arabBase.length; i+=2) {
result = arab/arabBase[i];
remainder = arab%arabBase[i];
if(result>0 && result<4) {
for(short j = 0; j<result; j++) {
resultRome += romeBase[i];
}
}
else if(result>=4 && result<9) {
for(short j=(short)result; j<5; j++) {
resultRome += romeBase[i];
}
resultRome += romeBase[i-1];
for(short j=5; j<result; j++) {
resultRome += romeBase[i];
}
}
else if(result == 9) {
resultRome += romeBase[i] + romeBase[i-2];
}
if(remainder==0) break;
arab = remainder;
}
return resultRome;
}
}
public static class RomeExtentions
{
class Pair
{
public int a;
public char r;
public Pair(int _a, char _r)
{
a = _a;
r = _r;
}
}
static Pair[] Arab2RomePairs = new Pair[] { new Pair(10000, ''), new Pair(5000, ''), new Pair(1000, 'M'), new Pair(500, 'D'), new Pair(100, 'C'), new Pair(50, 'L'), new Pair(10, 'X'), new Pair(5, 'V'), new Pair(1, 'I') };
/// <summary>
/// (int)
/// </summary>
/// <param name="i">int</param>
/// <returns>, , .. 9 == VIV, XI, VIV == 9</returns>
public static string Int2Rome(this int i)
{
string rv = "";
for (int j = 0, n; j < Arab2RomePairs.Length && i > 0; j++)
{
Pair p = Arab2RomePairs[j];
if ((n = i / p.a) > 0)
{
if (n > 3 && j > 0)
{
rv += new string(p.r, n % 3) + Arab2RomePairs[j - 1].r;
}
else
{
rv += new string(p.r, n);
}
i %= p.a;
}
}
return rv;
}
/// <summary>
/// (int)
/// </summary>
/// <param name="s"> </param>
/// <returns>int</returns>
/// <exception cref="FormatException"/>
public static int Rome2Int(this string s)
{
int lv = 0;
return s.ToUpperInvariant().Reverse().Sum(c =>
{
var pair = Arab2RomePairs.FirstOrDefault(p => p.r == c);
if (pair == null)
{
throw new FormatException(string.Format("Invalid Rome digit {0}", c));
}
return pair.a >= lv ? lv = pair.a : -(lv = pair.a);
});
}
}
[]
[] .