标题: 重新练习开平方
[打印本页]
作者: terse
时间: 2008-3-16 19:26
标题: 重新练习开平方
前面有发的在处理小数不是很完善
非常批处理那里的兄弟指出了递减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 ]
作者: s11ss
时间: 2008-3-16 21:39
看不懂,佩服一下先
作者: HAT
时间: 2008-3-16 23:27
能否顺便把算法讲解一下?
作者: terse
时间: 2008-3-17 01:12
Quote: |
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
作者: moniuming
时间: 2008-3-17 14:46
好东西,不过运行结果好像有点问题:
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
作者: moniuming
时间: 2008-3-17 14:53
发现问题了,双击运行不会有这种现象,在命令提示符下运行才会出现这种现象
作者: bushcet
时间: 2008-3-17 14:53
标题: 佩服
佩服佩服佩服!