批处理计算1+2+3+4+...+100=?
计算从1到100的数字之和[color=blue]要求:[/color]
不能直接echo,必须用程序计算出结果;
[color=blue]拓展提高:计算1+2+3+4+....+n=?[/color]
这里的n为用户输入的数字。
[color=Red][size=5]请用code标签把代码部分首尾括起来。[/size][/color]
Q: 如何用code把代码扩起来?
A: [url]http://bbs.bathome.net/thread-404-1-1.html[/url]
参考:批处理之家论坛使用常见问题FAQ
[url]http://bbs.bathome.net/thread-3473-1-1.html[/url] [code]@echo off
set n=1
set /p n=input a number!
for /l %%i in (1,1,%n%) do (
set /a sum+=%%i
)
echo %sum%
pause[/code] 说一下
set n=1这句在你的代码中没有起到作用,可以不加
区分数字跟其它字符可以用这个代码[code]echo %n%|findstr "^[1-9][0-9]*$">nul[/code] [quote]原帖由 [i]ieutk[/i] 于 2008-1-4 13:46 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=1563&ptid=464][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
说一下
set n=1这句在你的代码中没有起到作用,可以不加
区分数字跟其它字符可以用这个代码echo %n%|findstr "^[1-9][0-9]*$">nul [/quote]
不明白为何要这样写?
echo %n%|findstr "^[0-9]*$">nul
这样不行么? [quote]不明白为何要这样写?
echo %n%|findstr "^[0-9]*$">nul
这样不行么?[/quote]
你这样写的话呢第一个字符就有可能是0
[[i] 本帖最后由 ieutk 于 2008-1-4 14:27 编辑 [/i]] 原来是要排除0开头的.
[[i] 本帖最后由 随风 于 2008-1-7 12:34 编辑 [/i]]
回复 2# 的帖子
应该设sum的初始值为0set sum=0 @echo off
for /l %%a in (1,1,100) do set /a b+=%%a
echo %b%
pause echo %n%|findstr "^[1-9][0-9]*$">nul
经典 不太明白...呵呵. 本人是刚接触BAT的,2楼可以解释一下您写这个BAT的方法吗?THANK YOU!! [b]@echo off [color=red]关闭回显[/color][/b]
[b] set n=1 [color=red] 设置一个变量n ,他的值为1 (PS,这样设置没用~,这个变量没有用到~)[/color][/b]
[b][color=black]set /p n=input a number! [/color][color=red]设置一个变量n..这个变量是交互形势的,就是说,是用户输入的数字[/color][/b]
[align=left][b]for /l %%i in (1,1,%n%) do (
set /a sum+=%%i [/b][/align][align=left][b][color=red] for循环增加数字并且增加的数字相加 [/color][color=blue](1,1,%n%)[/color][color=red]中第一个1表示开始的数[/color][/b][b][color=red]字,第二个表示以一个单位(即1,2,3,4....)这样子逐个增加,%n%结束的数字(就是用户输入的数字)[/color][color=blue]set /a=sum+=%%i[/color][color=red] 就是将循环的数字互相增加~[/color][/b][/align][align=left][b]echo %sum% [color=red]显示最后的总和(即所有数的和)[/color][/b][/align][align=left][b][color=black]pause [/color][color=red]按任意键继续~[/color][/b][/align] @echo off
set b=0
for /l %%i in (1 1 100) do (set /a b=b+%%i)
echo %b%
看我的代码
不用FOR也是一样的可以的@echo off
set /a a=0,c=0
:start
set /a a+=1,c=c+a
if "%a%"=="100" goto end
goto start
:end
echo. %c%
pause @echo off
set /p n=请输入数据:
set /a c=0,a=0
:start
set /a a+=1, c=c+a
if "%a%"=="%n%" goto end
goto start
:end
echo. %c%
pause
对于第二个问题,我在上面的做了些改变,但是不好解决错误输入的情形 @echo off
:a
set a=0
set /p n=请输入加到几
for /l %%i in (1,1,%n%) do set /a a+=%%i
echo %a%
pause&cls&goto a 1+2+3+4+...+100=?
5050 小学题
回复 2楼 的帖子
第二次计算,是第一次的结果加上第二次的结果,有问题 [quote]原帖由 [i]yycup1111[/i] 于 2008-8-19 17:55 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=8081&ptid=464][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]@echo off
:a
set a=0
set /p n=请输入加到几
for /l %%i in (1,1,%n%) do set /a a+=%%i
echo %a%
pause&cls&goto a [/quote]
正确答案 不用for,不用goto,不用递归,最最简单的方法,哈哈
还有比这更简单的思路吗??
[quote]
[font=Fixedsys][color=#000000]@[/color][color=#d50000]echo [/color][color=#000000]off
[/color][color=#d50000]set [/color][color=#000000]/p n=请输入加到几?
[/color][color=#d50000]set[/color][color=#000000]/a a=(1+n)*n/2
[/color][color=#d50000]echo [/color][color=#000000]%a%
[/color][color=#d50000]pause[/color][/font][/quote] 呵呵
做新手这么久了,还没回答问题啊!
现在就奉上我的答案!
[code]@echo off&setlocal EnableDelayedExpansion
set a=0
set /p n=请输入:
for /l %%i in (1 1 %n%) do (
set /a a+=%%i
echo !a!
)
pause>nul[/code]
[[i] 本帖最后由 wangwei4106 于 2008-9-1 18:56 编辑 [/i]] 想了半天,没有做出来,只能看一下大家的思路了 @echo off
set /a sun=0
FOR /L %%i IN (1,1,100) DO set /a sun+=%%i
echo %sun%
pause [code]@echo off
set/p a1=头项
set/p a2=末项
set/p a3=相邻两个数之差
set /a n=(%a2%-%a1%)/%a3%+1
set /a n1=(%a1%+%a2%)*%n%/2
echo %n1%&pause
for /l %%a in (%a1% %a3% %a2%) do (set /a z+=%%a)
echo %z%&pause[/code]
支持间距两数之差为任意实数...
PS:算法很弱智...
[[i] 本帖最后由 qq641255849 于 2008-9-6 13:05 编辑 [/i]] [code]@ echo off
for /l %%i in (1,1,100) do (set /a sum+=%%i)
echo 从1到100的数字之和是:%sum%
pause>nul
set sum=0
set /p input=随意输入壹个数字:
for /l %%i in (1,1,%input%) do (set /a sum+=%%i)
echo 从1一直加到你输入的数字之和是:%sum%
pause>nul[/code]
我的做法
@echo offset /p n=
set /a sum=(1+%n%)*%n%/2
echo %sum% @echo off
set/p n="n等于? "
set/a s=1
set/a y=1
:d
set/a y=%y%+1
set/a s=%s%+%y%
if %y%==%n% goto p
goto d
:p
echo %s%
pause @echo off
echo 计算1+2+3+......+n
set sum=0
set /p a=请输入n:
setlocal EnableDelayedExpansion
for /l %%i in (1,1,%a%) do (
set val=%%i
set /a sum=!!sum!+!val!!
)
echo 1+2+3+......+%a%=!sum!
endlocal
set sum=
set val=
set a=
pause
----------------------------------------------
看了看别人的代码,for /l %%i in (1,1,%input%) do (set /a sum+=%%i)
为什么这个时候可以不用延时变量?sum难道不是在预处理中就替换了的?
希望有高人解释解释
[[i] 本帖最后由 batbird 于 2008-9-12 10:57 编辑 [/i]] [code]@echo off
:hk
set/p n=输入一个数:
set/a m=(1+%n%)*%n%/2
cls
echo %m%
goto hk[/code] 看看啊.. ..............看看