标题: 批处理求1-10000以内的所有水仙花数? [打印本页]
作者: youxi01 时间: 2008-1-3 23:18 标题: 批处理求1-10000以内的所有水仙花数?
水仙花数是这样的数字:这个数各个数位上数字的立方和等于该数。比如 153=1*1*1+5*5*5+3*3*3
作者: more 时间: 2008-3-27 11:16
- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (1,1,9) do (
- for /l %%b in (0,1,9) do (
- set /a bb=%%a*%%a+%%b*%%b
- if !bb!==%%a%%b echo %%a%%b 是水仙花数
- for /l %%c in (0,1,9) do (
- set /a aa=%%a*%%a*%%a+%%b*%%b*%%b+%%c*%%c*%%c
- if !aa!==%%a%%b%%c echo %%a%%b%%c 是水仙花数
- for /l %%d in (0,1,9) do (
- set /a cc=%%a*%%a*%%a+%%b*%%b*%%b+%%c*%%c*%%c+%%d*%%d*%%d
- if !cc!==%%a%%b%%c%%d echo %%a%%b%%c%%d 是水仙花数
- ))))
- echo.&pause
复制代码
作者: 梦想种子 时间: 2008-3-29 18:26
- @echo off
- setlocal enabledelayedexpansion
- set "u1="
- for /l %%i in (0,1,9) do set /a t%%i=%%i*%%i*%%i
- for /l %%i in (1,1,10000) do (
- set k=%%i
- set /a a=%%i/10000
- set /a b=%%i/1000"%%"10
- set /a c=%%i/100"%%"10
- set /a d=%%i/10"%%"10
- set /a e=%%i"%%"10
- set /a n=t!a!+t!b!+t!c!+t!d!+t!e!
- if "!n!" == "%%i" echo %%i
- )
- pause
复制代码
请问有没有效率高的算法?
作者: 随风 时间: 2008-3-29 19:37 标题: 回复 3楼 的帖子
你这个效率应该是很高了,所用的时间应该是for /l 必须的时间了吧。。
作者: lhjoanna 时间: 2008-10-31 12:20 标题: 求教:
@echo off&setlocal EnableDelayedExpansion
for /l %%k in (0,1,9) do ( set /a t%%k=%%k*%%k*%%k )
for /l %%i in (1,1,10000) do (
set num=%%i
set "n="
:loop
set /a a=!num!%%10
set /a num/=10
set /a n+=t!a!
if !num! neq 0 goto loop
if !n!==%%i echo %%i
)
pause
此段代码第二个for循环为何只能循环10次??
作者: kingerpk 时间: 2009-2-9 20:38
- @echo off
-
- setlocal EnableDelayedExpansion
-
- for /l %%a in (1,1,10000) do (
-
- set /a a=%%a/10000
- ::万
- set /a b=%%a/1000-!a!*10
- ::千
- set /a c=%%a/100-!a!*100-!b!*10
- ::百
- set /a e=%%a/10-!a!*1000-!b!*100-!c!*10
- ::十
- set /a d=%%a%%10
- ::个
- set /a k=!a!*!a!*!a!+!b!*!b!*!b!+!c!*!c!*!c!+!d!*!d!*!d!+!e!*!e!*!e!
-
- if !k! == %%a echo %%a
- )
-
- pause
复制代码
好长啊~~~~惭愧~~~
望大家指点!!
作者: irresolute 时间: 2009-2-15 21:51 标题: 我来试试
- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (1,1,10000) do (
- set /a a=%%i/10000
- set /a b=%%i-!a!*10000,b=b/1000
- set /a c=%%i-!a!*10000-!b!*1000,c=c/100
- set /a d=%%i-!a!*10000-!b!*1000-!c!*100,d=d/10
- set /a e=%%i%%10
- set /a aa=a*a*a+b*b*b+c*c*c+d*d*d+e*e*e
- if %%i==!aa! echo %%i是水仙花数
- )
- pause>nul
复制代码
作者: irresolute 时间: 2009-2-15 22:00 标题: 第二种方法(都是笨的)
- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (10000,-1,1) do (
- set k=%%i
- set a=!k:~0,1!
- set b=!k:~1,1!
- set c=!k:~2,1!
- set d=!k:~3,1!
- set e=!k:~4,1!
- set /a aa=a*a*a+b*b*b+c*c*c+d*d*d+e*e*e
- if %%i==!aa! echo %%i是水仙花数
- )
- pause>nul
复制代码
作者: TonyW 时间: 2009-2-17 23:59
说实话, 不能完全理解... 看了一次楼上几位的代码后,根据自己的理解和回忆..还是写不出来!!
作者: MYM123 时间: 2009-2-22 22:59
楼上高手,受教了!厉害
作者: pzspdl 时间: 2009-2-23 00:45
原帖由 irresolute 于 2009-2-15 22:00 发表
@echo off
setlocal enabledelayedexpansion
for /l %%i in (10000,-1,1) do (
set k=%%i
set a=!k:~0,1!
set b=!k:~1,1!
set c=!k:~2,1!
set d=!k:~3,1!
set e=!k:~4,1!
set /a aa=a*a*a+b*b*b+c*c*c+d*d* ...
感觉这段写得非常漂亮,只是set a=!k:~0,1!
set b=!k:~1,1!
set c=!k:~2,1!
set d=!k:~3,1!
set e=!k:~4,1!这里我不太明白
作者: myzwd 时间: 2009-2-24 21:04 标题: 请问
%~si和%~fi 我真没搞明白差别在那里。
作者: sjzong 时间: 2009-5-9 00:43 标题: 我来试试
- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (0 1 9) do set/a t%%a=%%a*%%a*%%a
- for /l %%i in (1 1 9) do (
- if !t%%i!==%%i echo %%i 是水仙花数。
- for /l %%j in (0 1 9) do (
- set/a num=!t%%i!+!t%%j!
- if !num!==%%i%%j echo %%i%%j 是水仙花数。
- for /l %%k in (0 1 9) do (
- set/a num=!t%%i!+!t%%j!+!t%%k!
- if !num!==%%i%%j%%k echo %%i%%j%%k 是水仙花数。
- for /l %%l in (0 1 9) do (
- set/a num=!t%%i!+!t%%j!+!t%%k!+!t%%l!
- if !num!==%%i%%j%%k%%l echo %%i%%j%%k%%l 是水仙花数。
- ))))
- pause>nul
复制代码
[ 本帖最后由 sjzong 于 2009-5-9 00:56 编辑 ]
作者: Demon 时间: 2011-6-1 09:52
水仙花数的定义错了
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
例如:1^3 + 5^3 + 3^3 = 153,1634 = 1^4 + 6^4 + 3^4 + 4^4 = 1634
作者: common 时间: 2011-6-9 21:46
11# pzspdl
%a:~[m[,n]]%
方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以
简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)
%PATH:~10,5% 这个什么意思,看例子:
截取功能例子1:
@echo off
set a=bbs.verybat.cn
set var=%a:~1,2%
echo %var%
pause
我也是菜鸟,这个题我也写了半天没写出来,最后是参照别人实现了,没脸发上来了
作者: BS0小陈 时间: 2011-7-5 16:21
我受不了了!看不懂啊!
对于3楼的:
set "u1="
set /a a=%%i/10000
这两个是干什么用的。尤其是第二个这为什么可以啊。比如1这个数。a=1/10000这。。。
对于8楼:
如果只有1位数的话那么有的变量就是空的怎么计算啊?还有后面的那个:set /a aa=a*a*a+b*b*b+c*c*c+d*d*d+e*e*e
怎么使用变量时不要用到!!啊?可是的的确确代码可以
我晕死了!
作者: CrLf 时间: 2011-7-5 19:01
16# BS0小陈
set /a 支持多条算式,所以自带解释变量的功能,引用变量时可以直接使用变量名无需经过 cmd 预处理,但是当引用的变量名以数字开头时会出错
作者: scarcr 时间: 2011-8-8 16:23
竟然发错位置了,一会儿再来解决这个问题。
作者: scarcr 时间: 2011-8-8 18:57
本帖最后由 scarcr 于 2011-8-8 18:58 编辑
回复 5# lhjoanna
我的问题跟你一样,也同样希望谁可以帮忙解决一下。
我在每一步添加”echo number&pause”,
最后发现是在运行了一次goto XXXX之后跳出了循环,我分析原因应该是在for的一次完整循环中只能运行一次goto命令
我的代码是这样子的,感觉咱们原因也应该是一样的- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (0,1,9) do (set/a #%%i=%%i*%%i*%%i)
- for /l %%i in (1,1,10000) do (
- set "nu=%%i"
- for /l %%j in (1,1,5) do (
- set a=!nu:~,1!
- set/a num+=#!a!
- set nu=!nu:~1!
- if "!nu!"=="" goto A
- )
- :A
- if !num!==%%i echo (%%i是水仙花数)
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |