[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【新手练习】一道批处理数学题

有一个数,他各位上数字相加的和为n(例如250,各位上数字和就为2+5+0=7),恰好这个数等于2的n次方(连续n个2相乘),请在批处理的计算范围内求出这个数并显示出来(可能有多个答案)

一个数:abc
表达式:n = a + b + c
    abc = 2 ^ n(即 2 的 n 次方)

思路:批处理的计算范围到2^31-1,数字非常打,不可能一个一个数去试。但是注意到这个数是2的n次方,n>0且n<31的整数,只有30个,这样效率会高很多。
首先从2的1次方一直试到2的30次方,单独有个变量保存现在是几次方,然后每个数都算出各位和,看是否相等


拖拽代码框显示答案(自己写的,感觉不怎么好):
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set num=1
  4. set times=0
  5. :loop
  6. set /a times+=1
  7. set /a num*=2
  8. if %num% lss 0 pause&exit
  9. call :sum %num%
  10. if %t%==%times% echo %num%
  11. goto loop
  12. :sum
  13. set n=%1
  14. set t=0
  15. set ti=-1
  16. :suml
  17. set /a ti+=1
  18. if not "!n:~%ti%,1!"=="" set /a t+=!n:~%ti%,1!&goto suml
  19. goto :EOF
复制代码


[ 本帖最后由 wxcute 于 2009-5-12 12:15 编辑 ]
1

评分人数

    • wxcute: 题目很好,最好先别放答案。PB + 5

LS的首先循环了一次算出最大值,再循环来判断符合,感觉有点浪费
可以利用CMD的特性:超过最大值后值为变负来处理,这样只用了一次循环

TOP

返回列表