有一个数,他各位上数字相加的和为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次方,单独有个变量保存现在是几次方,然后每个数都算出各位和,看是否相等
拖拽代码框显示答案(自己写的,感觉不怎么好):
- @echo off
- setlocal enabledelayedexpansion
- set num=1
- set times=0
- :loop
- set /a times+=1
- set /a num*=2
- if %num% lss 0 pause&exit
- call :sum %num%
- if %t%==%times% echo %num%
- goto loop
- :sum
- set n=%1
- set t=0
- set ti=-1
- :suml
- set /a ti+=1
- if not "!n:~%ti%,1!"=="" set /a t+=!n:~%ti%,1!&goto suml
- goto :EOF
复制代码
[ 本帖最后由 wxcute 于 2009-5-12 12:15 编辑 ] |