Tao0Lu 发表于 2018-11-4 22:01:53

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

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

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

@echo off
setlocal enabledelayedexpansion
title 最简二次根式计算器
:start
set /p num=请输入被开方数:
set a=1
set /a n=num+0
if %num% lss 0 (
echo 负数没有平方根
pause
cls
goto start)
if not %num%==%n% (
echo %num%不是个数字
pause
cls
goto start)
if %num% leq 3 goto sosu

set /a u=1
:check
set /a u+=1
set /a i=u*u
if %i%==%num% goto ove
if %i% gtr %num% goto chso
goto check

:chso
set /a cl=num%%2
if %cl%==0 goto no
set count=3
:loop
set /a mod=num%%count
if %mod%==0 goto no
set /a count+=2
if %count%==%num% goto sosu
goto loop

:no
set /a a+=1
set /a b=a*a
if %b% gtr %num% goto sosu
set /a c=num%%b
set /a d=num/b
if %c%==0 (
set /a w=a
set q=1
goto no2)
goto no

:no2
set /a s=1
:check2
set /a s+=1
set /a i=s*s
if %i%==%d% goto loop3
if %i% gtr %d% goto chso2
goto check2

:chso2
set /a cl=d%%2
if %cl%==0 goto loop3
set count=3
:loop2
set /a mod=d%%count
if %mod%==0 goto loop3
set /a count+=2
if %count%==%d% goto nom
goto loop2

:loop3
set /a q+=1
set /a p=q*q
if %p% gtr %d% goto nom
set /a r=d%%p
set /a t=d/p
if %r%==0 (
set /a w*=q
set q=1
set d=%t%)
goto loop3

:ove
echo 最简二次根式为%u%
pause
cls
goto start
:sosu
echo 最简二次根式为√%num%
pause
cls
goto start
:nom
echo 最简二次根式为%w%√%d%
pause
cls
goto start


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

(中略)
set /a n=num+0
if %num% lss 0 (
echo 负数没有平方根
pause
cls
goto start)
if not %num%==%n% (
echo %num%不是个数字
pause
cls
goto start)
if %num% leq 3 goto sosu
(中略)
批处理中,如果一个字符加上0结果就是0,所以与原本字符不相等。这样就可以判断输入值是不是数字。



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

(中略)
set /a u=1
:check
set /a u+=1
set /a i=u*u
if %i%==%num% goto ove
if %i% gtr %num% goto chso
goto check
(中略)
为了防止不是完全平方数,一旦i的值大于被开方数就放弃



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

(中略)
:chso
set /a cl=num%%2
if %cl%==0 goto no
set count=3
:loop
set /a mod=num%%count
if %mod%==0 goto no
set /a count+=2
if %count%==%num% goto sosu
goto loop
(中略)
因为素数肯定不能被2和奇数整除,也就是被2和奇数除后余数为0
批处理中,表示变量两边的"%"与除余的符号"%"是一样的,cmd为了分辨,将"%%"设定为除余。
最后一个if和判断是否为完全平方数用的最后一个if是一样的,为了防止死循环




set a=1
(中略)
:no
set /a a+=1
set /a b=a*a
set /a c=num%%b
set /a d=num/b
if %c%==0 (goto next)
if %b% gtr %num% goto sosu
goto no
(中略)

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

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

Si515 发表于 2018-11-20 18:18:27

如图强算SIN值一般,emmm
页: [1]
查看完整版本: 【批处理】计算最简二次根式