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

回复 1楼 的帖子

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

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

TOP

回复 26楼 的帖子

对哦,呵呵,碰到大的素数时却是运算很慢。
【新青年世界】
windows+R
cmd
start http:/hi.baidu.com/huajinghua

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

回复 23楼 的帖子

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

TOP

回复 24楼 的帖子

这么多题,在答题时,把题目一起贴出来好吗?
技术问题请到论坛发帖求助!

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

分解质因数

【程序14】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
 重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

代码如下
  1. @echo off
  2. set /p a=请输入要分解的数
  3. set /a c=a/2
  4. :a
  5. set /a b=%b%+1
  6. set /a d=%a%/%b%
  7. set /a s=%a%%%%b%
  8. if not "%s%"=="0" (goto a) else (set/p=%b% <nul &set a=%d% &set b=1&goto a)
  9. pause
复制代码

[ 本帖最后由 huajinghua 于 2008-4-11 19:23 编辑 ]
1

评分人数

    • youxi01: 简洁,赞。大质数会有效率问题...PB + 4
【新青年世界】
windows+R
cmd
start http:/hi.baidu.com/huajinghua

TOP

打印杨辉三角
转一个,
原创作者:wudixin96
:
  1. @echo off&setlocal enabledelayedexpansion
  2. :top
  3. ::原创作者:wudixin96
  4. ::  in=行数:
  5. set/a ab=1,var=30,in=10
  6. set str=1
  7. for /l %%i in (1,1,%in%) do (
  8.    set "num="
  9.    set /a num2=0
  10.    for %%a in (!str!) do (
  11.    set /a num2+=1
  12.    if !num2!==1 set "str1="
  13.    set /a num1=%%a+num
  14.    set "str1=!str1! !num1!"
  15.    set num=%%a
  16.    )
  17.    call :lis "!str1:~1!"
  18.    set "str=!str1! 0"
  19. )
  20. pause>nul
  21. exit
  22. :lis
  23. set max=%~1
  24. for /l %%a in (0 1 300) do (
  25.   if not "!max:~%%a,1!"=="" set /a ci+=1
  26. )
  27. set /a ki=var-ci/2
  28. for /l %%a in (1 1 !ki!) do set "kg= !kg!"
  29. echo !kg!!max!
  30. set nam!ab!=!kg!!max!
  31. set /a ab+=1
  32. set ci=0&set "kg="
  33. goto :eof
复制代码
技术问题请到论坛发帖求助!

TOP

【程序23】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*

:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "ko=                              "
  3. for /l %%i in (1 2 13) do (
  4.   if defined flag (set /a n-=2&set /a c-=1) else set /a n=%%i&set /a c+=1
  5.   call set m=%%ko:~!c!%%
  6.   set /p=!m!<nul
  7.   for /l %%b in (1 1 !n!) do set /p=*<nul
  8.   echo.
  9.   if !n! geq 7 set flag=a
  10. )
  11. echo.&pause
复制代码
技术问题请到论坛发帖求助!

TOP

回复 18楼 的帖子

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

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

水仙花数
原创作者: 梦想种子
:
  1. @echo off&setlocal enabledelayedexpansion
  2. :: 原创作者: 梦想种子
  3. for /l %%i in (0 1 9) do set /a t%%i=%%i*%%i*%%i
  4. for /l %%i in (1 1 10000) do (
  5.   set "k=00000%%i"
  6.   set a=!k:~-1!
  7.   set b=!k:~-2,1!
  8.   set c=!k:~-3,1!
  9.   set d=!k:~-4,1!
  10.   set e=!k:~-5,1!
  11.   set /a n=t!a!+t!b!+t!c!+t!d!+t!e!
  12.   if "!n!" == "%%i" echo %%i
  13. )
  14. pause
复制代码
技术问题请到论坛发帖求助!

TOP

继续讨论水仙花数……
【新青年世界】
windows+R
cmd
start http:/hi.baidu.com/huajinghua

TOP

回复 15楼 的帖子

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

TOP

@echo off&setlocal EnableDelayedExpansion
for /l %%a in (101 2 200) do (
set t=%%a
set "flag="
set /a x=!t!/2
  for /l %%b in (2 1 !x!) do (
    set /a m=%%a %% %%b
     if !m! equ 0 set flag=A
  )
  if not defined flag echo 素数 %%a
)
echo\&pause
其实上面这段代码通用的,就是每个数让他去除小于它开根的数(但批处理不能算出根号,所以把范围在扩大为这个数到一半),youxi01的代码在101-200之内没问题,但换作把范围400时就多出了很多结果,呵呵,但用在101-200之内时就正确,而且运行速度快。上面这段代码就运行速度慢了点,但是没错误

[ 本帖最后由 huajinghua 于 2008-4-11 13:42 编辑 ]
【新青年世界】
windows+R
cmd
start http:/hi.baidu.com/huajinghua

TOP

返回列表