批处理之家's Archiver

youxi01 发表于 2008-1-3 23:02

批处理计算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]

小竹 发表于 2008-1-3 23:09

[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]

ieutk 发表于 2008-1-4 13:46

说一下

set n=1这句在你的代码中没有起到作用,可以不加
区分数字跟其它字符可以用这个代码[code]echo %n%|findstr "^[1-9][0-9]*$">nul[/code]

随风 发表于 2008-1-4 13:59

[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
这样不行么?

ieutk 发表于 2008-1-4 14:25

[quote]不明白为何要这样写?
echo %n%|findstr "^[0-9]*$">nul
这样不行么?[/quote]

你这样写的话呢第一个字符就有可能是0

[[i] 本帖最后由 ieutk 于 2008-1-4 14:27 编辑 [/i]]

随风 发表于 2008-1-4 14:40

原来是要排除0开头的.

[[i] 本帖最后由 随风 于 2008-1-7 12:34 编辑 [/i]]

fjcqlcx 发表于 2008-2-6 16:46

回复 2# 的帖子

应该设sum的初始值为0

set sum=0

duanxianfell 发表于 2008-3-17 22:21

@echo off
for /l %%a in (1,1,100) do set /a b+=%%a
echo %b%
pause

xiaoxx 发表于 2008-4-27 19:29

echo %n%|findstr "^[1-9][0-9]*$">nul

经典

wjta 发表于 2008-4-27 20:49

不太明白...呵呵.

lily33300 发表于 2008-4-28 18:16

本人是刚接触BAT的,2楼可以解释一下您写这个BAT的方法吗?THANK YOU!!

vicp7764 发表于 2008-4-28 21:03

[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]

coffechicken 发表于 2008-4-30 18:11

@echo off
set b=0
for /l %%i in (1 1 100) do (set /a b=b+%%i)
echo %b%

yaohaixu 发表于 2008-5-5 22:45

看我的代码

不用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

yaohaixu 发表于 2008-5-5 22:51

@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

对于第二个问题,我在上面的做了些改变,但是不好解决错误输入的情形

yycup1111 发表于 2008-8-19 17:55

@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

hexiao361 发表于 2008-8-21 09:17

1+2+3+4+...+100=?
5050   小学题

hexiao361 发表于 2008-8-21 09:20

回复 2楼 的帖子

第二次计算,是第一次的结果加上第二次的结果,有问题

hexiao361 发表于 2008-8-21 09:22

[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]





正确答案

dishuo 发表于 2008-8-21 10:55

不用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]

wangwei4106 发表于 2008-9-1 18:54

呵呵
做新手这么久了,还没回答问题啊!
现在就奉上我的答案!
[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]]

loverwind 发表于 2008-9-2 09:47

想了半天,没有做出来,只能看一下大家的思路了

xjxxdnmwj 发表于 2008-9-5 11:19

@echo off
set /a sun=0
FOR /L %%i IN (1,1,100) DO set /a sun+=%%i
echo %sun%
pause

qq641255849 发表于 2008-9-6 09:47

[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]]

dywjzh 发表于 2008-9-8 12:48

[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]

bater 发表于 2008-9-9 10:57

我的做法

@echo off
set /p n=


set /a sum=(1+%n%)*%n%/2
echo %sum%

书皮 发表于 2008-9-9 19:17

@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

batbird 发表于 2008-9-12 10:50

@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]]

wxcute 发表于 2008-9-15 13:41

[code]@echo off
:hk
set/p n=输入一个数:
set/a m=(1+%n%)*%n%/2
cls
echo %m%
goto hk[/code]

stu_light 发表于 2008-10-14 20:57

看看啊..   ..............看看

页: [1] 2 3 4 5 6

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.