找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14626|回复: 5

[特效代码] 求助批处理如何实现输入数值显示相应的字母?

[复制链接]
发表于 2009-3-20 19:09:07 | 显示全部楼层 |阅读模式
以下代码可以将A  赋值为 1
                        B              2
                        C              4
                        D              8  (2的3次方)
                               ...
然后A B C... 可以执行+ - * / 运算

  1. @echo off &setlocal
  2. set /p abc=输入
  3. set a=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  4. for %%i in (%a%) do set /a %%i=1"<<num,num+=1
  5. set /a abc=%abc%
  6. echo %abc%
  7. pause
复制代码
请问怎么实现其逆过程
如输入8 显示D
    输入10 显示B+D

[ 本帖最后由 raozhao2008 于 2009-3-21 10:08 编辑 ]
发表于 2009-3-21 11:03:04 | 显示全部楼层
先来一个很粗糙的
  1. @echo off
  2. set letters=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  3. for %%i in (%letters%) do set /a "%%i=1<<bit",bit+=1&call set _%%%%i%%=%%i
  4. set /p num=请输入:
  5. call :dec2bin %num% bin
  6. echo binary: %bin: =%
  7. for %%a in (%bin%) do call set "Reverse=%%a %%Reverse%%"
  8. for %%a in (%Reverse%) do set /a "value=(1<<index)*%%a",index+=1&call call set str=%%%%_%%value%%%%%% %%str%%
  9. for %%a in (%str%) do call set "result=%%a+%%result%%"
  10. echo %num%=%result:~,-1%
  11. for %%a in (%result:+= %) do call set "result2=%%result2%%+%%%%a%%"
  12. echo %num%=%result2:~1%
  13. echo.&echo.&pause&exit/b

  14. :dec2bin
  15. setlocal
  16. set str=0123456789abcdef%无必要%
  17. set /a b=%~1
  18. :lp
  19. set /a a=b%%2,b/=2
  20. call set "bin=%%str:~%a%,1%% %bin%"
  21. if %b% gtr 0 goto lp
  22. endlocal&set %~2=%bin%
  23. goto :EOF
复制代码

评分

参与人数 1PB +2 收起 理由
raozhao2008 + 2 谢谢回帖

查看全部评分

 楼主| 发表于 2009-3-21 11:28:55 | 显示全部楼层

回复 2楼 的帖子

一看头就大了
初试通过
谢了
发表于 2009-3-21 17:21:59 | 显示全部楼层
zqz兄的代码复杂了,用位与&就可以计算出是哪些数的和~

评分

参与人数 1PB +2 收起 理由
raozhao2008 + 2 不懂位与&amp;amp;,但还是要谢谢

查看全部评分

发表于 2009-3-22 01:09:48 | 显示全部楼层

回复 4楼 的帖子

的确,位运算简单多了。感谢pusofalse兄提醒。
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set /p "num=Input:\>"
  4. for /l %%a in (0 1 31) do (
  5.     set /a "n=1<<%%a", "m=n&num"
  6.     if !m! neq 0 set /p=!n! <nul
  7. )
  8. echo.&pause
复制代码

[ 本帖最后由 zqz0012005 于 2009-3-22 01:11 编辑 ]

评分

参与人数 1PB +2 收起 理由
raozhao2008 + 2 精简很多,但。。。

查看全部评分

 楼主| 发表于 2009-4-9 15:48:18 | 显示全部楼层

回复 5楼 的帖子

运行结果是
输入7
显示1 2 4
不是A B C
请问该怎么改
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:35 , Processed in 0.021866 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表