找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18530|回复: 0

[数值计算] 批处理版一元多项式相加算法

[复制链接]
发表于 2020-4-10 21:50:35 | 显示全部楼层 |阅读模式
本帖最后由 老刘1号 于 2020-4-29 11:28 编辑
  1. @Echo Off
  2. Setlocal Enabledelayedexpansion
  3. Title 【老刘编写】一元多项式相加算法
  4. Path "%~dp0"
  5. If Not Exist "Queue_LSS.Bat" (
  6.         Echo "Queue_LSS"缺失!
  7.         Pause&Exit
  8. )
  9. Set "Queue=Call Queue_LSS"

  10. Echo 多项式格式:系数1_指数1 系数2_指数2 ...
  11. Echo 要求:指数为整数且递减,但不必相邻。
  12. Echo 多项式例:3_5 4_4 -1_3 2_1 -1_0
  13. Echo 多项式例:2_4 1_3 -7_2 1_1
  14. Set /P Polynomial_1_String=输入多项式1:
  15. Set /P Polynomial_2_String=输入多项式2:

  16. Rem 生成队列。
  17. !Queue! :Init Polynomial_1
  18. For %%a In (!Polynomial_1_String!) Do (
  19.         Set _TMP_Data1_=%%a
  20.         !Queue! :Enqueue Polynomial_1 _TMP_Data1_
  21. )
  22. !Queue! :Init Polynomial_2
  23. For %%a In (!Polynomial_2_String!) Do (
  24.         Set _TMP_Data2_=%%a
  25.         !Queue! :Enqueue Polynomial_2 _TMP_Data2_
  26. )

  27. Rem 相加。
  28. !Queue! :Dequeue Polynomial_1 _TMP_Data1_
  29. !Queue! :Dequeue Polynomial_2 _TMP_Data2_
  30. :Loop
  31.         Rem echo !_TMP_Data1_! !_TMP_Data2_!
  32.         For /f "Tokens=1-4 Delims=_ " %%a In ("!_TMP_Data1_! !_TMP_Data2_!") Do (
  33.                 Set /A _TMP_Coef1_=%%a,_TMP_Expon1_=%%b
  34.                 Set /A _TMP_Coef2_=%%c,_TMP_Expon2_=%%d
  35.         )
  36.         rem Set _TMP_Expon
  37.         If !_TMP_Expon1_! Gtr !_TMP_Expon2_! (
  38.                 Echo !_TMP_Expon1_!次项系数:!_TMP_Coef1_!
  39.                 !Queue! :Dequeue Polynomial_1 _TMP_Data1_
  40.                 Rem echo !ErrorLevel!←
  41.                 If !Errorlevel! Neq 0 (
  42.                         Rem 队1已清空,输出队2。
  43.                         For /f "Tokens=1-2 Delims=_ " %%a In ("!_TMP_Data2_!") Do (
  44.                                 Echo %%b次项系数:%%a
  45.                         )
  46.                         rem echo 2
  47.                         Call :PrintLast Polynomial_2
  48.                         Pause&Exit
  49.                 )
  50.                 rem echo 3
  51.         ) Else If !_TMP_Expon1_! Lss !_TMP_Expon2_! (
  52.                 Echo !_TMP_Expon2_!次项系数:!_TMP_Coef2_!
  53.                 !Queue! :Dequeue Polynomial_2 _TMP_Data2_
  54.                 If !Errorlevel! Neq 0 (
  55.                         Rem 队2已清空,输出队1。
  56.                         For /f "Tokens=1-2 Delims=_ " %%a In ("!_TMP_Data1_!") Do (
  57.                                 Echo %%b次项系数:%%a
  58.                         )
  59.                         Call :PrintLast Polynomial_1
  60.                         Pause&Exit
  61.                 )
  62.         ) Else (
  63.                 Set /A _TMP_CoefLast=_TMP_Coef1_+_TMP_Coef2_
  64.                 Echo !_TMP_Expon1_!次项系数:^(!_TMP_Coef1_!^)+^(!_TMP_Coef2_!^)=!_TMP_CoefLast!
  65.                 !Queue! :Dequeue Polynomial_1 _TMP_Data1_
  66.                 If !Errorlevel! Neq 0 (
  67.                         Rem 队1已清空,输出队2。
  68.                         Call :PrintLast Polynomial_2
  69.                         Pause&Exit
  70.                 )
  71.                 !Queue! :Dequeue Polynomial_2 _TMP_Data2_
  72.                 If !Errorlevel! Neq 0 (
  73.                         Rem 队2已清空,输出队1。
  74.                         Rem 由于刚才队1的一个元素出队,所以在这里先输出。
  75.                         For /f "Tokens=1-2 Delims=_ " %%a In ("!_TMP_Data1_!") Do (
  76.                                 Echo %%b次项系数:%%a
  77.                         )
  78.                         Call :PrintLast Polynomial_1
  79.                         Pause&Exit
  80.                 )
  81.         )
  82. Goto :Loop

  83. :PrintLast
  84.         rem echo 4
  85.         !Queue! :Dequeue "%~1" _TMP_Data_
  86.         If !ErrorLevel! Equ 0 (
  87.                 For /f "Tokens=1-2 Delims=_ " %%a In ("!_TMP_Data_!") Do (
  88.                                 Echo %%b次项系数:%%a
  89.                 )
  90.                 Goto :PrintLast
  91.         )
  92. Goto :Eof
复制代码
Queue_LSS.BAT:批处理数据结构库

评分

参与人数 1技术 +1 收起 理由
bbaa + 1 太强了

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 21:40 , Processed in 0.018290 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表