概述
古罗马人设计了一个使用拉丁字母的数字系统,这一系统很好地为他们服务,而且现代文明仍在使用,尽管程度要小得多。在使用这些数字的时候,罗马人必须学会使用和操纵这些数字,这样才能在许多应用中发挥很大作用。例如,如果一个人拥有35头牛,他又买了27头牛,他怎么会知道新的总数,而不是把它们全部计算在内呢?(好的,用算盘.)如果罗马人能做到这一点,我们当然也能搞清楚。
目标
编写最短的算法/函数/程序,将两个罗马数字相加并输出结果,而不将输入的字符串表示转换为数字。
规则/约束
由于历史/中世纪前格式的不一致,我将概述一些非标准(按现代用法)的正字法规则。作为示例,请参阅下面的值指南。
VIIII == 9但是IX != 9是无效的/不允许的。Symbol Value
I 1
II 2
III 3
IIII 4
V 5
VIIII 9
X 10
XIIII 14
XXXXIIII 44
L 50
LXXXXVIIII 99
C 100
D 500
M 1,000XII + VIII = XX (12 + 8 = 20)
MCCXXII + MCCXXII = MMCCCCXXXXIIII (1,222 + 1,222 = 2,444)
XXIIII + XXXXII = LXVI (24 + 42 = 66)如果需要进一步澄清,请询问。
发布于 2012-05-28 07:02:24
s="IVXLCDM"
r=raw_input()
a=""
i=2
u=0
for c in s:r+=u/i*c;i=7-i;u=r.count(c);a+=u%i*c
print a[::-1]从输入中获取一个字符串(例如VIII + XII或VIII + XII =)。
发布于 2012-05-30 10:48:09
:;s/M/DD/;s/D/CCCCC/;s/C/LL/;s/L/XXXXX/;s/X/VV/;s/V/IIIII/;t;s/\W//g;:b;s/IIIII/V/;s/VV/X/;s/XXXXX/L/;s/LL/C/;s/CCCCC/D/;s/DD/M/;tb发布于 2012-05-28 07:24:56
一个非常简单的算法-计数每一个数字,循环处理溢出到下一个,打印。
从标准输入读取。类似于XVI + CXX的东西会起作用(忽略除数字以外的任何东西,因此并不真正需要+ )。
x="IVXLCDM"
i=raw_input()
d=dict((c,i.count(c))for c in x)
for c in x:
n=2+3*(c in x[::2])
if d[c]>=n:d[c]-=n;d[x[x.find(c)+1]]+=1
print"".join(c*d[c]for c in reversed(x))https://codegolf.stackexchange.com/questions/6005
复制相似问题