中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 19:01
48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » 重新练习开平方
可打印版本  805 / 6
第1楼 terse 发表于 2008-03-16 19:26
银牌会员 发帖 946 积分 2,404
重新练习开平方
前面有发的在处理小数不是很完善
非常批处理那里的兄弟指出了递减M可以省去一个SET 修改下
@echo off
set a=2
set/p p=请输入需要开平方的数字(0~321063之间)
set/p w=请输入精确到小数点后几位
:lp
set /a a=(p/a+a)/2,n=a*a,y=p-n
set r=%a%
if %n% gtr %p% goto lp
if %n% equ %p% goto ok
:lp1
set/a b+=1,m=10,x=r*20,y*=100
:lp2
set/a m-=1,s=(x+m)*m
if %s% gtr %y% goto lp2
set/a y-=s
set r=%r%%m%&set t=%t%%m%
if %w% gtr %b% goto lp1
:ok
if not "%t%" == "" set a=%a%.%t%
echo %p%开平方结果: %a%
pause>nul

[ Last edited by terse on 2008-3-17 at 03:58 PM ]
第2楼 s11ss 发表于 2008-03-16 21:39
银牌会员 发帖 566 积分 2,098
看不懂,佩服一下先
第3楼 HAT 发表于 2008-03-16 23:27
版主 发帖 5,017 积分 9,023
能否顺便把算法讲解一下?
第4楼 terse 发表于 2008-03-17 01:12
银牌会员 发帖 946 积分 2,404
Originally posted by HAT at 2008-3-16 23:27:
能否顺便把算法讲解一下?

:lp
::迭代法算出整数,并得出迭代出整数的平方和%P%的差Y,Y作余数推下,
set /a a=(p/a+a)/2,n=a*a,y=p-n
set r=%a%
if %n% gtr %p% goto lp
if %n% equ %p% goto ok
:lp1
::位移2位Y,即Y*100,从高位往低位推出小数,再从1到9试商Y(大不过9),
::将商的20倍加上这个试商再乘以试商,如果所得的积S小于余数,确定试商M!
set/a b+=1,m=0,x=r*20,y*=100
:lp2
set/a m+=1,s=(x+m)*m
if %s% gtr %y% goto lp3
goto lp2
:lp3
::继续上步,再求余数Y,类推下..
set/a m-=1,s=(x+m)*m,y-=s
set r=%r%%m%&set t=%t%%m%
if %w% equ %b% goto ok
goto lp1
第5楼 moniuming 发表于 2008-03-17 14:46
银牌会员 发帖 574 积分 1,335 来自 广西
好东西,不过运行结果好像有点问题:

F:\test\more\新建文件夹>test
请输入需要开平方的数字(0~321063之间)100
请输入精确到小数点后几位2
100开平方结果: 10.09

F:\test\more\新建文件夹>test
请输入需要开平方的数字(0~321063之间)100
请输入精确到小数点后几位1
100开平方结果: 10.09

F:\test\more\新建文件夹>test
请输入需要开平方的数字(0~321063之间)100
请输入精确到小数点后几位0
100开平方结果: 10.09
第6楼 moniuming 发表于 2008-03-17 14:53
银牌会员 发帖 574 积分 1,335 来自 广西
发现问题了,双击运行不会有这种现象,在命令提示符下运行才会出现这种现象
第7楼 bushcet 发表于 2008-03-17 14:53
新手上路 发帖 3 积分 6
佩服
佩服佩服佩服!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023