|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『楼 主』:
重新练习开平方
前面有发的在处理小数不是很完善
非常批处理那里的兄弟指出了递减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 ]
此帖被 +5 点积分 点击查看详情 评分人:【 s11ss 】 | 分数: +5 | 时间:2008-3-16 21:39 |
|
|
简单!简单!再简单! |
|
2008-3-16 19:26 |
|
|
s11ss
银牌会员
积分 2098
发帖 566
注册 2007-9-11
状态 离线
|
|
2008-3-16 21:39 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
|
2008-3-16 23:27 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
4 楼』:
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
|
简单!简单!再简单! |
|
2008-3-17 01:12 |
|
|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
『第
5 楼』:
好东西,不过运行结果好像有点问题:
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
|
|
2008-3-17 14:46 |
|
|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
『第
6 楼』:
发现问题了,双击运行不会有这种现象,在命令提示符下运行才会出现这种现象
|
|
2008-3-17 14:53 |
|
|
bushcet
新手上路
积分 6
发帖 3
注册 2008-2-28
状态 离线
|
|
2008-3-17 14:53 |
|
|