Board logo

标题: for 加 set /a 能否实现开方 [打印本页]

作者: 6622186     时间: 2007-3-15 09:22    标题: for 加 set /a 能否实现开方

for 加 set /a 能否实现开方
作者: vkill     时间: 2007-3-16 01:32
我一直没有思路
作者: namejm     时间: 2007-3-16 02:30
  可以实现简单的开方,但是效率不怎么样,并且只限于存在整数次方根的情况,当然,超过2^31-1的数字就不行了。基本思路就是:如果对x开n次方,则从2开始到x/n的整数止,对每个数进行测试,只到找到为止,代码如下:
@echo off

setlocal enabledelayedexpansion

:Main
cls
set x=
set n=
set /p x=     请输入被开方的数:
set /p n=     请输入开方次数:
set /a mod=%n%%%2

if %x% equ 1 (
    echo.
    echo      %x% 的 %n% 次方根是 1
    echo.
    pause
    goto Main
)

set /a quotient=x/n
set flag=

for /l %%i in (2,1,%quotient%) do (
    set num=%%i
    for /l %%j in (2,1,%n%) do (
        set /a num=%%i*!num!
    )
    if !num! equ %x% (
        echo.
        if %mod% equ 0 (
            echo      %x% 的 %n% 次方根是 ±%%i
        ) else echo      %x% 的 %n% 次方根是 %%i
        echo.
        set flag=1
        goto end
    )
)

:end
if not defined flag (
    echo.
    echo      %x% 的 %n% 次方根不是整数
    echo.
)
pause
goto Main
[ Last edited by namejm on 2007-3-16 at 01:02 PM ]
作者: 6622186     时间: 2007-3-21 03:15
还不错, 不过当被开方数为负数会提示错误, 如  -27 3
作者: 3dnowex     时间: 2008-7-31 21:55
回去翻一下微积分的书,重点看麦克劳林级数,再利用for循环和set/a 运算
作者: 523066680     时间: 2008-7-31 21:59
……郁闷中……namejm没有到我的帖子出现过……
作者: pusofalse     时间: 2008-7-31 23:45
变化的只是头脑,来个简单的。
@echo off&setlocal enabledelayedexpansion
for /l %%a in (1 1 100) do (
     set/a n=%%a*%%a
     set ..!n!=%%a * %%a = !n!
)
set/p var=Input:
if defined ..%var% echo !..%var%!
pause>nul
10000以内。。。

[ Last edited by pusofalse on 2008-7-31 at 11:46 PM ]