Board logo

标题: [数值计算] bat实现罗马数字的转换 [打印本页]

作者: BingjianREMIX    时间: 2024-4-14 00:25     标题: bat实现罗马数字的转换

使用bat将阿拉伯数字转换成罗马数字

我自己尝试过很多版本,但都不太尽如人意,所以还是使用了穷举法

代码如下:
  1. @echo off
  2. REM 阿拉伯数字转换为罗马数字
  3. setlocal EnableDelayedExpansion
  4. REM 定义罗马数字组
  5. set "ones_romans[0]="
  6. set "ones_romans[1]=I"
  7. set "ones_romans[2]=II"
  8. set "ones_romans[3]=III"
  9. set "ones_romans[4]=IV"
  10. set "ones_romans[5]=V"
  11. set "ones_romans[6]=VI"
  12. set "ones_romans[7]=VII"
  13. set "ones_romans[8]=VIII"
  14. set "ones_romans[9]=IX"
  15. set "tens_romans[0]="
  16. set "tens_romans[1]=X"
  17. set "tens_romans[2]=XX"
  18. set "tens_romans[3]=XXX"
  19. set "tens_romans[4]=XL"
  20. set "tens_romans[5]=L"
  21. set "tens_romans[6]=LX"
  22. set "tens_romans[7]=LXX"
  23. set "tens_romans[8]=LXXX"
  24. set "tens_romans[9]=XC"
  25. set "hundreds_romans[0]="
  26. set "hundreds_romans[1]=C"
  27. set "hundreds_romans[2]=CC"
  28. set "hundreds_romans[3]=CCC"
  29. set "hundreds_romans[4]=CD"
  30. set "hundreds_romans[5]=D"
  31. set "hundreds_romans[6]=DC"
  32. set "hundreds_romans[7]=DCC"
  33. set "hundreds_romans[8]=DCCC"
  34. set "hundreds_romans[9]=CM"
  35. set "thousands_romans[0]="
  36. set "thousands_romans[1]=M"
  37. set "thousands_romans[2]=MM"
  38. set "thousands_romans[3]=MMM"
  39. :ConvertToRoman
  40. REM 接收输入端
  41. cls
  42. echo.
  43. set "number="
  44. set /p number=请输入一个整数:
  45. set "result="
  46. REM 检测是否大于3999
  47. set "stand=3999"
  48. if "%number%" equ "%stand%" goto :processing
  49. if "%number%" gtr "%stand%" (
  50.     cls
  51.     echo.
  52.     echo 被转换数字不可大于3999
  53.     pause >nul
  54.     goto :ConvertToRoman
  55. )
  56. if "%number%" lss "%stand%" goto :processing
  57. :processing
  58. REM 千位
  59. set /a t=number/1000
  60. set /a number=number%%1000
  61. set "result=!result!!thousands_romans[%t%]!"
  62. REM 百位
  63. set /a t=number/100
  64. set /a number=number%%100
  65. set "result=!result!!hundreds_romans[%t%]!"
  66. REM 十位
  67. set /a t=number/10
  68. set /a number=number%%10
  69. set "result=!result!!tens_romans[%t%]!"
  70. REM 个位
  71. set "result=!result!!ones_romans[%number%]!"
  72. echo.
  73. echo 得到罗马数字为:%result%
  74. pause >nul
  75. goto :ConvertToRoman
复制代码

作者: hlzj88    时间: 2024-4-14 10:45

本帖最后由 hlzj88 于 2024-4-14 10:53 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. :cl
  3. set /p sr=------输入数字-----》
  4. set sz=000!sr!
  5. if !sr! gtr 3999 echo 输入数字大于3999&&goto cl
  6. set qw=!sz:~-4,1!
  7. for %%i in (1.M,2.MM,3.MMM) do set qw=!qw:%%~ni=%%~xi!
  8. set bw=!sz:~-3,1!
  9. for %%i in (1.C,2.CC,3.CCC,4.CD,5.D,6.DC,7.DCC,8.DCCC,9.CM) do set bw=!bw:%%~ni=%%~xi!
  10. set sw=!sz:~-2,1!
  11. for %%i in (1.X,2.XX,3.XXX,4.XL,5.L,6.LX,7.LXX,8.LXXX,9.XC) do set sw=!sw:%%~ni=%%~xi!
  12. set gw=!sz:~-1,1!
  13. for %%i in (1.I,2.II,3.III,4.IV,5.V,6.VI,7.VII,8.VIII,9.IX) do set gw=!gw:%%~ni=%%~xi!
  14. set jg=!qw!!bw!!sw!!gw!
  15. set jg=!jg:.=!
  16. set jg=!jg:0=!
  17. echo 已转换!sr!为!jg!
  18. goto cl
复制代码
保存为ansi格式
作者: BingjianREMIX    时间: 2024-4-14 16:35

回复 2# hlzj88


    这是...来打击我的?
作者: terse    时间: 2024-4-14 17:23

本帖最后由 terse 于 2024-4-14 20:21 编辑

手机码,太累,
下午手机上码错字,唉
  1. @echo off&setlocal enabledelayedexpansion
  2. set/a "_I=1,_IV=4,_V=5,_IX=9,_X=10,_XL=40,_L=50,_XC=90,_C=100,_CD=400,_D=500,_CM=900,_M=1000"
  3. set "romstr=M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I"
  4. set num=123
  5. set "result="
  6. for %%i in (%romstr%) do (
  7.        for /l %%j in (1,1,3) do if !num! geq !_%%i! (
  8.              set result=!result!%%i
  9.              set /a num-=_%%i
  10.        )
  11. )
  12. echo;!result!
  13. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2