找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 1577|回复: 1

【批处理】计算最简二次根式

[复制链接]

12

主题

35

回帖

959

积分

用户组: 大·技术宅

UID
3517
精华
1
威望
36 点
宅币
802 个
贡献
33 次
宅之契约
0 份
在线时间
207 小时
注册时间
2018-3-2
发表于 2018-11-4 22:01:53 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 套路 于 2020-2-11 13:05 编辑

批处理计算最简二次根式
虽说是计算 也不过就是一个循环罢了

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title 最简二次根式计算器
  4. :start
  5. set /p num=请输入被开方数:
  6. set a=1
  7. set /a n=num+0
  8. if %num% lss 0 (
  9. echo 负数没有平方根
  10. pause
  11. cls
  12. goto start)
  13. if not %num%==%n% (
  14. echo %num%不是个数字
  15. pause
  16. cls
  17. goto start)
  18. if %num% leq 3 goto sosu

  19. set /a u=1
  20. :check
  21. set /a u+=1
  22. set /a i=u*u
  23. if %i%==%num% goto ove
  24. if %i% gtr %num% goto chso
  25. goto check

  26. :chso
  27. set /a cl=num%%2
  28. if %cl%==0 goto no
  29. set count=3
  30. :loop
  31. set /a mod=num%%count
  32. if %mod%==0 goto no
  33. set /a count+=2
  34. if %count%==%num% goto sosu
  35. goto loop

  36. :no
  37. set /a a+=1
  38. set /a b=a*a
  39. if %b% gtr %num% goto sosu
  40. set /a c=num%%b
  41. set /a d=num/b
  42. if %c%==0 (
  43. set /a w=a
  44. set q=1
  45. goto no2)
  46. goto no

  47. :no2
  48. set /a s=1
  49. :check2
  50. set /a s+=1
  51. set /a i=s*s
  52. if %i%==%d% goto loop3
  53. if %i% gtr %d% goto chso2
  54. goto check2

  55. :chso2
  56. set /a cl=d%%2
  57. if %cl%==0 goto loop3
  58. set count=3
  59. :loop2
  60. set /a mod=d%%count
  61. if %mod%==0 goto loop3
  62. set /a count+=2
  63. if %count%==%d% goto nom
  64. goto loop2

  65. :loop3
  66. set /a q+=1
  67. set /a p=q*q
  68. if %p% gtr %d% goto nom
  69. set /a r=d%%p
  70. set /a t=d/p
  71. if %r%==0 (
  72. set /a w*=q
  73. set q=1
  74. set d=%t%)
  75. goto loop3

  76. :ove
  77. echo 最简二次根式为%u%
  78. pause
  79. cls
  80. goto start
  81. :sosu
  82. echo 最简二次根式为√%num%
  83. pause
  84. cls
  85. goto start
  86. :nom
  87. echo 最简二次根式为%w%√%d%
  88. pause
  89. cls
  90. goto start
复制代码


首先这段代码判断用户输入的被开方数,如果不是正数或不是数字就让用户重新输入

  1. (中略)
  2. set /a n=num+0
  3. if %num% lss 0 (
  4. echo 负数没有平方根
  5. pause
  6. cls
  7. goto start)
  8. if not %num%==%n% (
  9. echo %num%不是个数字
  10. pause
  11. cls
  12. goto start)
  13. if %num% leq 3 goto sosu
  14. (中略)
复制代码

批处理中,如果一个字符加上0结果就是0,所以与原本字符不相等。这样就可以判断输入值是不是数字。



然后判断被开方数是不是完全平方数,如果是,就直接输出整数平方根
这里使用了一个循环来实现的

  1. (中略)
  2. set /a u=1
  3. :check
  4. set /a u+=1
  5. set /a i=u*u
  6. if %i%==%num% goto ove
  7. if %i% gtr %num% goto chso
  8. goto check
  9. (中略)
复制代码

为了防止不是完全平方数,一旦i的值大于被开方数就放弃



素数的最简二次根式就是√素数,根据这一点就可以加快计算的速度

  1. (中略)
  2. :chso
  3. set /a cl=num%%2
  4. if %cl%==0 goto no
  5. set count=3
  6. :loop
  7. set /a mod=num%%count
  8. if %mod%==0 goto no
  9. set /a count+=2
  10. if %count%==%num% goto sosu
  11. goto loop
  12. (中略)
复制代码

因为素数肯定不能被2和奇数整除,也就是被2和奇数除后余数为0
批处理中,表示变量两边的"%"与除余的符号"%"是一样的,cmd为了分辨,将"%%"设定为除余。
最后一个if和判断是否为完全平方数用的最后一个if是一样的,为了防止死循环




  1. set a=1
  2. (中略)
  3. :no
  4. set /a a+=1
  5. set /a b=a*a
  6. set /a c=num%%b
  7. set /a d=num/b
  8. if %c%==0 (goto next)
  9. if %b% gtr %num% goto sosu
  10. goto no
  11. (中略)
复制代码

这是判断被开方数是否可以被完全平方数整除,如果是,将可以整除的完全平方数开平方后放在√被开方数被这个完全平方数除后的结果前面(这个完全平方数的平方根√被开方数被这个完全平方数除后的结果)。但一次循环不能完成此操作,之后进行无限循环,直至无法被完全平方数整除,再输出结果。

优点:容易懂计算方法(笑)
缺点:大值计算较慢
回复

使用道具 举报

1

主题

16

回帖

44

积分

用户组: 初·技术宅

UID
4492
精华
0
威望
2 点
宅币
23 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-11-20
发表于 2018-11-20 18:18:27 | 显示全部楼层
如图强算SIN值一般,emmm
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-19 19:50 , Processed in 0.037152 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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