免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: yestreenstars
打印 上一主题 下一主题

[文本处理] 练习题(阿拉伯数字转化为罗马数字) [复制链接]

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
41 [报告]
发表于 2015-06-18 14:47 |只看该作者
回复 40# hjfeng1988

怎么可以这样说Tim大师~ @ly5066113
   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
42 [报告]
发表于 2015-06-18 14:57 |只看该作者
回复 37# yestreenstars

刚开始学,不太精通,勉强啊

  1. #!/usr/bin/python2

  2. ROM = [['I', 'V'], ['X', 'L'], ['C', 'D'], ['M']]
  3. GEN = lambda a, b, c, d, e, f, r: a * ROM[b][c] + d * ROM[e][f] + r
  4. LAM = [[3, lambda m, i, r: (0, i, 0, m, i, 0, r)],
  5.        [4, lambda m, i, r: (1, i, 0, 5 - m, i, 1, r)],
  6.        [5, lambda m, i, r: (0, i, 0, 1, i, 1, r)],
  7.        [8, lambda m, i, r: (1, i, 1, m - 5, i, 0, r)],
  8.        [9, lambda m, i, r: (10 - m, i, 0, 1, i + 1, 0, r)]]

  9. def A2R(n, i=0, R=''):
  10.     if n is 0: return R
  11.     n, m = divmod(n, 10)
  12.     return A2R(n, i + 1, GEN(*next(l(m, i, R) for v, l in LAM if m <= v)))


  13. test = [1, 4, 5, 6, 9, 10, 11, 76, 499, 3888]
  14. good = ['I', 'IV', 'V', 'VI', 'IX', 'X', 'XI', 'LXXVI', 'CDXCIX', 'MMMDCCCLXXXVIII']

  15. for I, N in enumerate(test):
  16.     rom = A2R(N)
  17.     print N, '=', rom, ':', rom == good[I]

复制代码


  1. 1 = I : True
  2. 4 = IV : True
  3. 5 = V : True
  4. 6 = VI : True
  5. 9 = IX : True
  6. 10 = X : True
  7. 11 = XI : True
  8. 76 = LXXVI : True
  9. 499 = CDXCIX : True
  10. 3888 = MMMDCCCLXXXVIII : True
复制代码

论坛徽章:
11
射手座
日期:2015-08-11 16:10:26辰龙
日期:2015-08-11 16:11:11黑曼巴
日期:2016-04-26 16:58:40
43 [报告]
发表于 2015-06-18 14:57 |只看该作者
回复 41# yestreenstars


    记得看过一个帖子,要求计算1+2+3+....+100,然后大家各种循环。有一高人写出:sum=(1+n)*n*2。哈哈

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
44 [报告]
发表于 2015-06-18 15:16 |只看该作者
本帖最后由 liion631818 于 2015-06-18 15:17 编辑

回复 1# yestreenstars
  1. function romanConvert(){
  2.         roman1=$1
  3.         roman5=$2
  4.         roman10=$3
  5.         bit=$4
  6.        
  7.         if [[ $bit < 4 ]]; then
  8.                 for((k=0; k<$bit; k++)); do
  9.                         echo -n $roman1
  10.                 done
  11.         elif [[ $bit == 4 ]]; then
  12.                 echo -n $roman1$roman5
  13.         elif [[ $bit == 5 ]]; then
  14.                 echo -n $roman5
  15.         elif [[ $bit > 5 && $bit < 9 ]]; then
  16.                 echo -n $roman5
  17.                 for((k=0; k<$bit-5; k++)); do
  18.                         echo -n $roman1
  19.                 done
  20.         elif [[ $bit == 9 ]]; then
  21.                 echo -n $roman1$roman10
  22.         elif [[ $bit == 10 ]]; then
  23.                 echo -n $roman10
  24.         fi
  25. }


  26. function decimal2RomanNumeral(){
  27.         read -p "please enter decimal numeric: " dec_numeric

  28.         echo $dec_numeric | grep "[^0-9]" 1>/dev/null 2>&1

  29.         if [ $? -eq 0 ]; then
  30.                 echo "ERROR: not numeric"
  31.                 exit
  32.         fi

  33.         len=${#dec_numeric}

  34.         if [ $len -eq 0 ] || [ $len -gt 4 ]; then
  35.                 echo "ERROR: numeric too little or big"
  36.                 exit
  37.         fi
  38.        
  39.         if [ $dec_numeric -lt 0 ] || [ $dec_numeric -gt 3999 ]; then
  40.                 echo "ERROR: 0 < n < 3999"
  41.                 exit
  42.         fi
  43.        
  44.         for((i=0; i<$len; i++)); do
  45.                 bit=${dec_numeric:i:1}
  46.                 digits=$((len-i))
  47.                
  48.                 #echo covert $bit in $digits
  49.                
  50.                 if [[ $digits == 4 ]]; then
  51.                         romanConvert M M M $bit
  52.                 elif [[ $digits == 3 ]]; then
  53.                         romanConvert C D M $bit
  54.                 elif [[ $digits == 2 ]]; then
  55.                         romanConvert X L C $bit
  56.                 elif [[ $digits == 1 ]]; then
  57.                         romanConvert I V X $bit
  58.                 fi
  59.                
  60.         done
  61.        
  62.         echo
  63.        
  64. }

  65. decimal2RomanNumeral
复制代码
  1. px@ubuntu:~/bash-script$ ./myscript.sh
  2. please enter decimal numeric: 1
  3. I
  4. px@ubuntu:~/bash-script$ ./myscript.sh
  5. please enter decimal numeric: 5
  6. V
  7. px@ubuntu:~/bash-script$ ./myscript.sh
  8. please enter decimal numeric: 9
  9. IX
  10. px@ubuntu:~/bash-script$ ./myscript.sh
  11. please enter decimal numeric: 10
  12. X
  13. px@ubuntu:~/bash-script$ ./myscript.sh
  14. please enter decimal numeric: 19
  15. XIX
  16. px@ubuntu:~/bash-script$ ./myscript.sh
  17. please enter decimal numeric: 20
  18. XX
  19. px@ubuntu:~/bash-script$ ./myscript.sh
  20. please enter decimal numeric: 21
  21. XXI
  22. px@ubuntu:~/bash-script$ ./myscript.sh
  23. please enter decimal numeric: 99
  24. XCIX
  25. px@ubuntu:~/bash-script$ ./myscript.sh
  26. please enter decimal numeric: 499
  27. CDXCIX
  28. px@ubuntu:~/bash-script$ ./myscript.sh
  29. please enter decimal numeric: 0499
  30. CDXCIX
  31. px@ubuntu:~/bash-script$ ./myscript.sh
  32. please enter decimal numeric: 3888
  33. MMMDCCCLXXXVIII
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
45 [报告]
发表于 2015-06-18 15:39 |只看该作者
回复 43# hjfeng1988

这公式不是在初中就已经学过了吗~
   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
46 [报告]
发表于 2015-06-18 15:42 |只看该作者
回复 42# substr函数

这次的没问题了~
   

论坛徽章:
2
2015年亚洲杯之伊拉克
日期:2015-04-13 10:55:1115-16赛季CBA联赛之山西
日期:2016-05-16 09:54:41
47 [报告]
发表于 2015-06-25 09:36 |只看该作者
瞧瞧~~~~。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP