技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 68|回复: 0
收起左侧

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

[复制链接]

8

主题

36

帖子

336

积分

用户组: 中·技术宅

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

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

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

x
本帖最后由 套路 于 2018-11-7 20:46 编辑

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

[Patch] 纯文本查看 复制代码
@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


首先这段代码判断用户输入的被开方数,如果不是正数或不是数字就让用户重新输入
[Patch] 纯文本查看 复制代码
(中略)
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,所以与原本字符不相等。这样就可以判断输入值是不是数字。



然后判断被开方数是不是完全平方数,如果是,就直接输出整数平方根
这里使用了一个循环来实现的
[Patch] 纯文本查看 复制代码
(中略)
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的值大于被开方数就放弃



素数的最简二次根式就是√素数,根据这一点就可以加快计算的速度
[Patch] 纯文本查看 复制代码
(中略)
: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是一样的,为了防止死循环



[Patch] 纯文本查看 复制代码
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
(中略)

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

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2018-11-20 14:03 , Processed in 0.071666 second(s), 14 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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