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

批处理列出1000以内回文数

[新手练功区的新手跟帖不多,可能是因为题目太难了。各位等等新手两天再回答好了。]
我国古代有一种回文诗,倒念顺念都有意思,例如“人过大佛寺”,倒读起来便是“寺佛大过人”。还有经典的对联“客上天然居,居然天上客”。此种例子举不胜举。

从左向右读与从右向左读完全一样的数字就是回文数,如11、121、767等等。

参照9楼的代码,按从小到大的顺序完全列出10000以内的回文数
(效率应该不会差到哪里去的。)
  1. @echo off
  2. set /a total=9
  3. for /l %%i in (1,1,9) do echo %%i%%i
  4. for /l %%i in (1,1,9) do (
  5.     for /l %%j in (0,1,9) do (
  6. echo %%i%%j%%i
  7.         set /a total+=1
  8.     )
  9. )
  10. for /l %%i in (1,1,9) do (
  11.     for /l %%j in (0,1,9) do (
  12.         echo %%i%%j%%j%%i
  13.         set /a total+=1
  14.     )
  15. )
  16. echo 一万以内共有%total%个回文数!
  17. pause>nul
复制代码

TOP

本帖最后由 shelluserwlb 于 2014-12-6 23:53 编辑

参照18楼的代码,改了一下,按从小到大的顺序显示1000以内的回文数(1个数字不能算回文数)。
  1. @echo off
  2. for /l %%i in (1,1,9) do echo %%i%%i
  3. for /l %%i in (1,1,9) do (
  4.     for /l %%j in (0,1,9) do (
  5. echo %%i%%j%%i
  6.     )
  7. )
  8. pause
复制代码

TOP

本帖最后由 shelluserwlb 于 2014-11-20 09:40 编辑
  1. @echo off
  2. goto :START
  3. 我国古代有一种回文诗,倒念顺念都有意思,例如“人过大佛寺”,倒读起来便是“寺佛大过人”。还
  4. 有经典的对联“客上天然居,居然天上客”。此种例子举不胜举。
  5. 从左向右读与从右向左读完全一样的数字就是回文数,如11、121、767等等。
  6. :START
  7. MODE CON LINES=200
  8. setlocal enabledelayedexpansion
  9. set /a total=0
  10. for /l %%i in (11,1,10000) do (
  11.     set num=%%i
  12.     :: 判断小于1000的数字
  13.     if !num! lss 1000  (
  14. if "!num:~0,1!"=="!num:~-1,1!" (
  15.     echo !num! & set /a total+=1  
  16. )
  17.     )
  18.    ::判断大于等于1000且小于10000的数字
  19.    if !num! geq 1000  ( if !num! lss 10000 (
  20. if "!num:~0,1!"=="!num:~-1,1!" ( if "!num:~1,1!"=="!num:~2,1!" (
  21.     echo !num! & set /a total+=1
  22.         ))
  23.     ))
  24. )
  25. echo 一万以内总共有%total%个回文件数。
  26. endlocal & pause>NUL
复制代码
上述是找出10000以内的回文数的批处理代码。

TOP

你们是怎么样炼成的啊
批处理爱好者,新学员

TOP

回复 29# 悬崖之树
这个代码有问题,并不是只要测试到六位数就提示“你输入的数太大了”,而是要到类似 “124521” 之类的六位数才会提示。下面是改进后的
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if exist 1.txt del 1.txt
  4. :ks
  5. set /p num=请输入一个最多5位的正整数:
  6. if %num% gtr 999999 echo 你的数太大了,请重新输入!& goto ks
  7. for /l %%i in (0,1,%num%) do (
  8.      set a=%%i
  9.      if "!a:~0,1!"=="!a:~-1!"  (
  10.        if "!a:~3,1!"=="" (
  11.          echo !a!>>1.txt
  12.        ) else (
  13.                 if "!a:~1,1!"=="!a:~-2,1!" (
  14.                   if "!a:~5,1!"=="" (
  15.                     echo !a!>>1.txt
  16.                   )
  17.                 )
  18.          )
  19.      )
  20. )
  21. echo 结果已经保存在当前目录下的1.txt文件中
  22. pause
复制代码
时光荏苒||新陈代谢&&涛声依旧||本性难移

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (0,1,1200) do (
  4.      set a=%%i
  5.      if "!a:~0,1!"=="!a:~-1!"  (
  6.        if "!a:~1,1!"=="" (
  7.          echo !a!>>1.txt
  8.        ) else (
  9.                 if "!a:~1,1!"=="!a:~-2,1!" (
  10.                   if "!a:~3,1!"=="" (
  11.                     echo !a!>>1.txt
  12.                   ) else echo 你的数太大啦!&goto  out
  13.                 )
  14.          )
  15.      )
  16. )
  17. :out
  18. pause
复制代码
时光荏苒||新陈代谢&&涛声依旧||本性难移

TOP

本帖最后由 mxxcgzxxx 于 2011-8-18 08:09 编辑

给个新思路,100000以内回文数
怎么就没人想出这个方案呢??很容易啊
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in  (1 1 99) do (
  4.          set /a a=%%i/10+%%i%%10*10+100
  5.          if !a:~-1!==0 (set a=!a:~-2,1!) else (set a=!a:~-2!)
  6.          echo %%i!a!
  7.          for /l %%j in (0 1 9) do echo %%i%%j!a!
  8.          pause>nul
  9.          )
  10. set /a b=99*11
  11. echo 100000以内有%b%个回文数
  12. pause>nul
复制代码
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

  1. @if not defined debug @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1 1 1000) do (
  3.     set /a a=%%i/100
  4.     set /a b=%%i/10-!a!*10
  5.     set /a c=%%i-!a!*100-!b!*10
  6.     if !c! equ !a! (if not !a! equ 0 echo %%i)
  7. )
  8. pause >nul
复制代码
[color=BLUE]一切只为了批处理&DOS[/color]

TOP

回复 1# wxcute
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (10 1 999) do (
  4. set "a=%%i"
  5. if "!a:~,1!" equ "!a:~-1!" (echo !a!)
  6. )
  7. pause
复制代码
1

评分人数

    • cjiabing: 思路可以,功底扎实。PB + 12

TOP

100到10000000以内的回文数

100以内的就不去“数”了。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (100,1,10000000) do (
  3. set a=%%a
  4. if "!a:~0,1!" == "!a:~-1,1!" (
  5. if "!a:~1,1!" == "!a:~-2,1!" (
  6. if "!a:~2,1!" == "!a:~-3,1!" (
  7. echo !a!
  8. ))))
  9. pause
复制代码

TOP

我也试试

这个问题如果是每一个数去判断的话,那效率是低点,但是这样求出的数是有顺序的!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (1 2 3 4 5 6 7 8 9) do (
  4. rem 以下两句是求两位的回文数
  5. echo %%a%%a
  6. set/a num+=1
  7. for %%b in (0 1 2 3 4 5 6 7 8 9) do (
  8. rem 以下两句是求三位的回文数
  9.   echo %%a%%b%%a
  10.   set/a num+=1
  11. rem 以下两句是求四位的回文数
  12.   echo %%a%%b%%b%%a
  13.   set/a num+=1
  14. )
  15. )
  16. echo 10000以内回文数共有!num!
  17. pause
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in ( 10,1,999 ) do (
  3. set str=%%i
  4. set a=!str:~0,1!
  5. set b=!str:~-1,1!
  6. if "!a!"=="!b!" echo %%i)
  7. pause
复制代码



10000以内的
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (10,1,10000) do (
  3. set str=%%i
  4. set a=!str:~0,1!
  5. set b=!str:~-1,1!
  6. set c=!str:~1,1!
  7. set d=!str:~-2,1!
  8. if "!a!"=="!b!" ( if "!c!"=="!d!" echo !str!))
  9. pause
复制代码

[ 本帖最后由 cainiao736 于 2009-4-4 16:45 编辑 ]

TOP

简洁10000以内的回文数:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (0 1 10000) do (
  3.     set a=%%i
  4.     if "!a:~0,1!"=="!a:~-1,1!" if !a! lss 1000 (echo !a!) else (if "!a:~1,1!"=="!a:~-2,1!" echo !a!)
  5. )
  6. pause
复制代码
(*^_^*)

TOP

来个10000以内的回文数:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (0 1 1000) do (
  3.     set a=%%i
  4.     if "!a:~0,1!"=="!a:~-1,1!" echo !a!
  5. )
  6. for /l %%i in (1001 1 10000) do (
  7.     set a=%%i
  8.     if "!a:~0,1!"=="!a:~-1,1!" if "!a:~1,1!"=="!a:~-2,1!" echo !a!
  9. )
  10. pause
复制代码
其实是在1000以内的多加几行。
(*^_^*)

TOP

返回列表