[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
大多的问题在dos联盟里已经解决了
可以考虑加精
欢迎各位朋友继续"突破"

TOP

求数字不同的排列组合

论坛里前几天就出现了相关代码,测试代码:
  1. @echo off &setlocal enabledelayedexpansion
  2. set "str=1 2 3 4 "
  3. for %%a in (%str%) do (
  4.         set var1=!str:%%a =!
  5.         for %%b in (!var1!) do (
  6.                 set var2=!var1:%%b =!
  7.                 for %%c in (!var2!) do (
  8.                         echo %%a%%b%%c
  9.                 )
  10.         )
  11. )
  12. pause>nul
复制代码

TOP

求某日期在一年中是第几天

测试代码:
  1. @echo off &setlocal enabledelayedexpansion
  2. set /p Cdate=请输入日期(如:2008-1-2日或2008/01/02):
  3. for /f "tokens=1-3 delims=/-, " %%a in ("%Cdate%") do (
  4. set/a yy=%%a,mm=100%%b%%100,dd=100%%c%%100
  5. )
  6. call ate2Day %yy%-1-1 days1
  7. call ate2Day %Cdate% days2
  8. set/a res=days2-days1+1
  9. echo.&echo %yy%年%mm%月%dd%日 是 %yy%年 的第 %res% 天。
  10. pause>nul
  11. goto :eof
  12. ::注意:以下"函数"由willsort完成(略有改动);
  13. ate2Day 日期 传回(数值)结果
  14. setlocal ENABLEEXTENSIONS
  15. for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
  16.   set yy=%%a & set mm=%%b & set dd=%%c
  17. )
  18. set /a dd=100%dd%%%100,mm=100%mm%%%100
  19. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  20. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  21. endlocal&set %2=%j%&goto :EOF
  22. ay2Date 数值 传回(日期)结果
  23. setlocal ENABLEEXTENSIONS
  24. set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  25. set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
  26. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  27. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  28. endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF
复制代码

TOP

打印99乘法表

此题namejm已经做了,测试代码:
  1. @echo off &setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 9) do (
  3.         for /l %%b in (1 1 %%a) do (
  4.                 set/a res=%%a*%%b
  5.                 set "res=!res!  " %======此处用来对齐=========%
  6.                 set/p=%%ax%%b=!res:~0,2!  <nul
  7.         )
  8.         echo.
  9. )
  10. pause>nul
复制代码

TOP

程序9

意思不明:“控制输出黑方格,还是白方格。”
是这样吗:□和■

TOP

回复 12楼 的帖子

代码稍做修改,效率稍有提高:
  1. @echo off&setlocal EnableDelayedExpansion
  2. for /l %%a in (101 2 200) do (
  3.   set "flag="
  4.   for /l %%b in (3 2 15) do (
  5.     set /a m=%%a %% %%b
  6.      if !m! equ 0 set flag=A
  7.   )
  8.   if not defined flag echo 素数 %%a
  9. )
  10. echo\&pause
复制代码
继续修正1,运行所用时间仅为原来的1/4
继续修正2,运行速率提高为原来的20倍

TOP

注意

以上计算方法个人认为适合 求算 10000 以内的素数,对于超大数字,应使用其它计算方法

TOP

回复 15楼 的帖子

呵呵,换做400时,将第二个for循环中的 15 改成 20 即可!!

TOP

求水仙花数

测试代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 水仙花数有:&echo.
  3. for /l %%i in (100 1 999) do (
  4.         set var=%%i
  5.         set/a num1=!var:~0,1!,num2=!var:~1,1!,num3=!var:~2,1!
  6.         set/a var=!num1!*!num1!*!num1!+!num2!*!num2!*!num2!+!num3!*!num3!*!num3!
  7.         if !var! EQU %%i echo %%i
  8.         )
  9. pause>nul
复制代码

TOP

回复 18楼 的帖子

呵呵,这句非常不错,避免了重复计算。
for /l %%i in (0 1 9) do set /a t%%i=%%i*%%i*%%i

TOP

分解质因数

测试代码(里有一bug,不知各位是否测试的出来,目前并不明白bug产生原因)
  1. @echo off&setlocal enabledelayedexpansion
  2. :start
  3. cls
  4. set "str=1"
  5. set /p EN=请输入一个数字:
  6. call :CheckPrime %EN% Prime Remainder
  7. set str=%str% x !OBJ!
  8. if "!str:~-2,1!"=="1" set str=!str:~0,-4!
  9. if not "!str:~-6,1!"=="1" set str=!str:~4!
  10. echo.&echo %EN% = !str!
  11. pause>nul
  12. goto :start
  13. :CheckPrime OBJ Prime Remainder
  14. set /a OBJ=%~1,Remainder=0
  15. set /a var=!OBJ!/2+1,var_=!OBJ! %% 2
  16. if !var_! EQU 0 (
  17. set str=!str! x 2
  18. set/a Prime=2,Remainder=!OBJ!/2
  19. call :CheckPrime !Remainder! Prime Remainder
  20. )
  21. for /l %%i in (3 2 !var!) do (
  22. set /a var_=!OBJ! %% %%i
  23. if !var_! EQU 0 (
  24. set str=!str! x %%i
  25. set/a Prime=%%i,Remainder=!OBJ!/%%i
  26. call :CheckPrime !Remainder! Prime Remainder
  27. )
  28. )
复制代码

TOP

回复 23楼 的帖子

代码够简洁,不错。
但是碰到大指数肯定会遭遇效率问题,举例:3659

TOP

程序16:输入两个正整数m和n,求其最大公约数和最小公倍数。

转一个自己较早前写的代码了:
  1. @echo off
  2. echo.
  3. echo          求两数的最大公约数、最小公倍数
  4. echo ========================================
  5. title 求两数的最大公约数
  6. setlocal enabledelayedexpansion
  7. set /p num1=请输入第一个数字:
  8. set /p num2=请输入第二个数字:
  9. set/a res=%num1%*%num2%
  10. echo ----------------------------------------
  11. echo %num1%和%num2%:&echo.
  12. :test
  13.      set /a temp=%num1% %% %num2%
  14.      if %temp% NEQ 0 (
  15.          set /a num1=!num2!
  16.          set /a num2=!temp!
  17.          goto :test)
  18. set /a res=%res%/%num2%
  19. echo 最小公倍数为:%res% 最大公约数为:%num2%
  20. pause>nul
复制代码

TOP

回复 1楼 的帖子

建议将程序问题 和 解决方案按照如下格式罗列:
问题:***

解决方案:***F(***楼)
以便于查阅

TOP

返回列表