注册 登录
编程论坛 C++教室

[求助]如何转化阿拉伯数字和罗马数字?

avenger258 发布于 2007-09-17 05:39, 2211 次点击
Roman Numeral Table
1 I 14 XIV 27 XXVII 150 CL
2 II 15 XV 28 XXVIII 200 CC
3 III 16 XVI 29 XXIX 300 CCC
4 IV 17 XVII 30 XXX 400 CD
5 V 18 XVIII 31 XXXI 500 D
6 VI 19 XIX 40 XL 600 DC
7 VII 20 XX 50 L 700 DCC
8 VIII 21 XXI 60 LX 800 DCCC
9 IX 22 XXII 70 LXX 900 CM
10 X 23 XXIII 80 LXXX 1000 M
11 XI 24 XXIV 90 XC 1600 MDC
12 XII 25 XXV 100 C 1700 MDCC
13 XIII 26 XXVI 101 CI 1900 MCM

Roman Numerals
I = 1 C = 100
V = 5 D = 500
X = 10 M = 1000
L = 50
4 IV
72 LXXII
148 CXLVIII
291 CCXCI
704 DCCIV
2008 MMVIII
1984 MCMLXXXIV



上图是罗马数字的表示,求各位大侠指点下,如何将自己输入的任意阿拉伯数字转化为罗马数字.这个程序的关键函数要怎么写?比如:

[此贴子已经被作者于2007-9-17 5:42:09编辑过]

3 回复
#2
leeco2007-09-17 11:08
为这些数字建立映射表
1
4
5
9
10
40
50
90
100
400
500
900
1000
而后贪心即可
#3
leeco2007-09-17 11:22

#include <iostream>
#include <string>

using namespace std;

int arr1[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
string arr2[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};

string covert2Roman(int n)
{
string s;
int i=0;
while(n){
if(n>=arr1[i]){
n-=arr1[i];
s+=arr2[i];
}
else {
i++;
}
}
return s;
}

int main()
{
int n;
while(cin>>n){
cout<<covert2Roman(n)<<endl;
}
}

#4
aipb20072007-09-17 14:26
LS很强,赞
1