标题: [数值计算] bat实现罗马数字的转换 [打印本页]
作者: BingjianREMIX 时间: 2024-4-14 00:25 标题: bat实现罗马数字的转换
使用bat将阿拉伯数字转换成罗马数字
我自己尝试过很多版本,但都不太尽如人意,所以还是使用了穷举法
代码如下:- @echo off
- REM 阿拉伯数字转换为罗马数字
- setlocal EnableDelayedExpansion
-
- REM 定义罗马数字组
- set "ones_romans[0]="
- set "ones_romans[1]=I"
- set "ones_romans[2]=II"
- set "ones_romans[3]=III"
- set "ones_romans[4]=IV"
- set "ones_romans[5]=V"
- set "ones_romans[6]=VI"
- set "ones_romans[7]=VII"
- set "ones_romans[8]=VIII"
- set "ones_romans[9]=IX"
- set "tens_romans[0]="
- set "tens_romans[1]=X"
- set "tens_romans[2]=XX"
- set "tens_romans[3]=XXX"
- set "tens_romans[4]=XL"
- set "tens_romans[5]=L"
- set "tens_romans[6]=LX"
- set "tens_romans[7]=LXX"
- set "tens_romans[8]=LXXX"
- set "tens_romans[9]=XC"
- set "hundreds_romans[0]="
- set "hundreds_romans[1]=C"
- set "hundreds_romans[2]=CC"
- set "hundreds_romans[3]=CCC"
- set "hundreds_romans[4]=CD"
- set "hundreds_romans[5]=D"
- set "hundreds_romans[6]=DC"
- set "hundreds_romans[7]=DCC"
- set "hundreds_romans[8]=DCCC"
- set "hundreds_romans[9]=CM"
- set "thousands_romans[0]="
- set "thousands_romans[1]=M"
- set "thousands_romans[2]=MM"
- set "thousands_romans[3]=MMM"
-
- :ConvertToRoman
- REM 接收输入端
- cls
- echo.
- set "number="
- set /p number=请输入一个整数:
- set "result="
-
- REM 检测是否大于3999
- set "stand=3999"
- if "%number%" equ "%stand%" goto :processing
- if "%number%" gtr "%stand%" (
- cls
- echo.
- echo 被转换数字不可大于3999
- pause >nul
- goto :ConvertToRoman
- )
- if "%number%" lss "%stand%" goto :processing
-
- :processing
- REM 千位
- set /a t=number/1000
- set /a number=number%%1000
- set "result=!result!!thousands_romans[%t%]!"
-
- REM 百位
- set /a t=number/100
- set /a number=number%%100
- set "result=!result!!hundreds_romans[%t%]!"
-
- REM 十位
- set /a t=number/10
- set /a number=number%%10
- set "result=!result!!tens_romans[%t%]!"
-
- REM 个位
- set "result=!result!!ones_romans[%number%]!"
-
- echo.
- echo 得到罗马数字为:%result%
- pause >nul
- goto :ConvertToRoman
复制代码
作者: hlzj88 时间: 2024-4-14 10:45
本帖最后由 hlzj88 于 2024-4-14 10:53 编辑
- @echo off&setlocal enabledelayedexpansion
- :cl
- set /p sr=------输入数字-----》
- set sz=000!sr!
-
- if !sr! gtr 3999 echo 输入数字大于3999&&goto cl
- set qw=!sz:~-4,1!
- for %%i in (1.M,2.MM,3.MMM) do set qw=!qw:%%~ni=%%~xi!
-
- set bw=!sz:~-3,1!
- 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!
-
- set sw=!sz:~-2,1!
- 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!
-
- set gw=!sz:~-1,1!
- 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!
-
- set jg=!qw!!bw!!sw!!gw!
- set jg=!jg:.=!
- set jg=!jg:0=!
- echo 已转换!sr!为!jg!
- goto cl
复制代码
保存为ansi格式
作者: BingjianREMIX 时间: 2024-4-14 16:35
回复 2# hlzj88
这是...来打击我的?
作者: terse 时间: 2024-4-14 17:23
本帖最后由 terse 于 2024-4-14 20:21 编辑
手机码,太累,
下午手机上码错字,唉- @echo off&setlocal enabledelayedexpansion
- 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"
- set "romstr=M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I"
- set num=123
- set "result="
- for %%i in (%romstr%) do (
- for /l %%j in (1,1,3) do if !num! geq !_%%i! (
- set result=!result!%%i
- set /a num-=_%%i
- )
- )
- echo;!result!
- pause
-
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |