中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 19:02
楼 主 for 加 set /a 能否实现开方 发表于 2007-03-15 09:22 ·  中国 湖北 黄冈 电信
高级用户
★★★
积分 894
发帖 411
注册 2007-02-17 12:15
UID 79697
性别 男
状态 离线
for 加 set /a 能否实现开方
@set c= 不知则觉多,知则觉少,越知越多,便觉越来越少. --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


2 发表于 2007-03-16 01:32 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
我一直没有思路
3 发表于 2007-03-16 02:30 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  可以实现简单的开方,但是效率不怎么样,并且只限于存在整数次方根的情况,当然,超过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 ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
4 发表于 2007-03-21 03:15 ·  中国 湖北 黄冈 电信
高级用户
★★★
积分 894
发帖 411
注册 2007-02-17 12:15
UID 79697
性别 男
状态 离线
还不错, 不过当被开方数为负数会提示错误, 如 -27 3
@set c= 不知则觉多,知则觉少,越知越多,便觉越来越少. --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


5 发表于 2008-07-31 21:55 ·  中国 江西 吉安 电信
初级用户
积分 41
发帖 20
注册 2007-03-05 00:45
UID 80788
性别 男
状态 离线
回去翻一下微积分的书,重点看麦克劳林级数,再利用for循环和set/a 运算
6 发表于 2008-07-31 21:59 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
UID 110072
性别 男
状态 离线
……郁闷中……namejm没有到我的帖子出现过……
7 发表于 2008-07-31 23:45 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
变化的只是头脑,来个简单的。
@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 ]
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
论坛跳转: