谁有罗马数字转换为阿拉伯数字的函数?
类似于 function convert(s:string):integer;输入'i'输出1
输入'vi'输出6之类的主ID散分散的没有可用分了,只好用马甲,呵呵
类似于 function convert(s:string):integer;输入'i'输出1
输入'vi'输出6之类的主ID散分散的没有可用分了,只好用马甲,呵呵
解决方案 »
- 请高手来看下TServerSocket的问题
- 我想捕捉windows程序关闭实件,该用api的什么函数?
- OCX和DLL有什么区别?
- 请看一下我的多层系统设计是否合理???
- 百分求助,在线等待……
- delphi中的小问题-----无奈?
- 现有两表,结构如下,如果我想得到以下结果,我的sql应该怎么写?(100分)真心相求,不够可加!
- 如何把txt文件以ascii方式读取,另何处可以下载vb帮助文件
- 如何获得WEBBROWSER要打开的页面
- 如何让combobox一获得焦点就显示下拉框??
- PageControl,如何在点击鼠标右键时也可以切换TabSheet页面?就如同在TabSheet页上部点左键那样?
- 如何在dbgrid中使用check控件!
CASE
如果只有1-12,用Case语句不就可以了?
-----------------------------------------
拜托是数字不是月份好不好
数字有只到12的吗?回复人: wwx213() ( ) 信誉:98 2005-7-12 17:01:07 得分: 0
找个阿拉伯转大写金额的看看,一样的
--------------------------------
阿拉伯转大写的我有,但是算法不一样的
罗马数字计数方法是左减右加,跟10进制不一样继续up
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
xxiii,23
xxiv,24
xxv,25
xxvi,26
xxvii,27
xxviii,28
xxix,29
xxx,30
xxxi,31
xxxii,32
xxxiii,33
xxxiv,34
xxxv,35
xxxvi,36
xxxvii,37
xxxviii,38
xxxix,39
xl,40
xli,41
xlii,42
xliii,43
xliv,44
xlv,45
xlvi,46
xlvii,47
xlviii,48
xlix,49
l,50
li,51
lii,52
liii,53
liv,54
lv,55
lvi,56
lvii,57
lviii,58
lix,59
lx,60
lxi,61
lxii,62
lxiii,63
lxiv,64
lxv,65
lxvi,66
lxvii,67
lxviii,68
lxix,69
lxx,70
lxxi,71
lxxii,72
lxxiii,73
lxxiv,74
lxxv,75
lxxvi,76
lxxvii,77
lxxviii,78
lxxix,79
lxxx,80
lxxxi,81
lxxxii,82
lxxxiii,83
lxxxiv,84
lxxxv,85
lxxxvi,86
lxxxvii,87
lxxxviii,88
lxxxix,89
xc,90
xci,91
xcii,92
xciii,93
xciv,94
xcv,95
xcvi,96
xcvii,97
xcviii,98
ic,99
c,100
ci,101
cdic,499
d,500
di,501mcmlxxxiv,1984
mcmxc,1990
mm,2000
1.重复次数:一个罗马数字符号重复几次,就表示这个数的几倍。如:"III"表示"3";"XXX"表示"30"。
2.右加左减:一个代表大数字的符号右边附一个代表小数字的符号,就表示大数字加小数字,如"VI"表示"6","DC"表示"600"。一个代表大数字的符号左边附一个代表小数字的符号,就表示大数字减去小数字的数目,如"IV"表示"4","XL"表示"40","VD"表示"495"。
3.上加横线:在罗马数字上加一横线,表示这个数字的一千倍。如:" "表示 "15,000"," "表示"165,000"。 http://www.tsinghuaschool-sz.com/mathsgarden/fzs.htm
i:integer;
function DecToRoman( iDecimal: integer ): string;
const
aRomans: array [ 1..13 ] of string = ( 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M' );
aArabics: array [ 1..13 ] of integer = ( 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 );
var
i: integer;
s: string;
begin
s := ''; for i := 13 downto 1 do
while ( iDecimal >= aArabics[i] ) do
begin
iDecimal := iDecimal - aArabics[i];
s := s + aRomans[i];
end;
DecToRoman:= s;
end;begin
readln(i);
if (i>1999) or (i<1) then exit;
writeln(i,' = ',DecToRoman(i));
end.
function DecToRoman (iDecimal: longint): string;
const
aRomans: array [ 1..13 ] of string =
( 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M' );
aArabics: array [ 1..13 ] of integer =
( 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 );
var
i : integer;
begin
for i := 13 downto 1 do
while (iDecimal >= aArabics[i]) do
begin
iDecimal := iDecimal - aArabics[i];
Result := Result + aRomans[i];
end;
end;
function RomanToDec (iRoman: string): integer;
const
aRomans: array [ 1..13 ] of string =
( 'I', 'V', 'IV', 'X', 'IX', 'L', 'XL', 'C', 'XC', 'D', 'CD', 'M', 'CM' );
aArabics: array [ 1..13 ] of integer =
( 1, 5, 4, 10, 9, 50, 40, 100, 90, 500, 400, 1000, 900 );
var
i : integer;
procedure ConvertDigit (var AText: string; var IntRes: integer;
const Rom: string; const Arab: integer);
var
p : integer;
begin
for p := 1 to Length (AText) do
AText[p] := UpCase(AText[p]);
Repeat
p := Pos (Rom, AText);
if P > 0 then begin
inc (IntRes, Arab);
Delete (AText, p, Length (Rom));
end;
until P=0;
end;
begin
Result := 0;
for i := 13 downto 1 do
ConvertDigit (iRoman, Result, aRomans[i], aArabics[i]);
end;