中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 18:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 计算1到100中所有奇数的和?
楼 主 计算1到100中所有奇数的和? 发表于 2006-12-22 07:41 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
如题,方法不限. 我该怎么写呢?
2 发表于 2006-12-22 07:48 ·  中国 河南 郑州 电信
中级用户
★★
积分 439
发帖 170
注册 2006-01-09 20:29
UID 48707
状态 离线
@ECHO OFF
setlocal EnableDelayedExpansion
for /l %%i in (1,2,99) do set /a num=!num!+%%i
echo !num!
pause
bat c c++
3 发表于 2006-12-22 07:54 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
命令行输入

for /l %i in (1,2,99) do set /a num+=%i
4 发表于 2006-12-22 07:59 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
UID 73417
性别 男
状态 离线
for i=1 to 99 step 2
b=b+i
next
msgbox b

'保存为VBS。
5 发表于 2006-12-22 08:20 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
谢了 FOR又学会了点
不过 如何写 批处理文件 运算呢?
for /l %%i in (1 2 99) do set /a num+=%%i
不行啊??

[ Last edited by huzixuan on 2006-12-22 at 08:28 AM ]
6 发表于 2006-12-22 09:10 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
for /l %%i in (1,2,99) do set /a num+=%%i

你少了“,”号
7 发表于 2006-12-22 09:32 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
我也来一个另类计算的方法:)


@echo off
:: 计算 从 1 -- 9999 之间的奇数之和

echo 开始时间:%time%
set a=25 && set b=25
for /L %%i in (1,1,999) do ( set /a b+=50 && set /a a+=b )
echo %a%
echo 结束时间:%time% 



计算速度测试如下:


C:\TEMP\debug>r
开始时间:20:30:09.06
25000000
结束时间:20:30:09.10 



计算原理,真TMD费劲


规律 (列求和的值)
=========================================
1 3 5 7 9 = 25 |
11 13 15 17 19 = 75 | 25+75=100
21 23 25 27 29 = 125 |
31 33 35 37 39 = 175 | 125+175=300

... ...                  |
                      |
91 93 95 97 99 = 475

=========================================

根据奇数出现的行与列的规律,总结如下:


  1) 每行列相加的值会依次递增 50
  2) 每行的与每行间的同一列相差 10

根据以上推出公式如下:

  
  第1次部分公式推出:   = 加第二行的和

  第2次所推出的公式:  25 + 50 * 总行数(总行数的偏移量从0开始)

              例:求第4行(1--40)之间的奇数,则:
                25 + 50 * (4-1) = 175


  第3次所推出的公式:  如何知道一个数有多少行?
              根据最上面的奇数过程的表,推出第行之间相差 10
              所以,一个最大要求奇数和的这个数的小数点向左移一位,例:

              如: 求 1 -- 1000 之间的奇数和 ,那么就有 100 行(小数点左移1位)
              按上面刚刚推出来的公式我们测试一下:
              公式: 25 + 50 * 总行数(总行数的偏移量从0开始)
代入: set /a !b+=50!+=b

             …………晕了


[ Last edited by redtek on 2006-12-21 at 08:37 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
9527 +5 2006-12-23 00:28
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
8 Sum_Of_Prime 发表于 2006-12-22 09:47 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
Rewrite it to your .txt file and Rename it as Sum.bat.
Then run it, you will get the answer!

@echo off

for /l %%a in (1,2,100) do (
(set /a sum_of_prime+=%%a )
)
echo sum_of_prime= %sum_of_prime% !

@pause

In CMD-Line , you can just type

(for /l %a in (1,2,100) do (@ set /a Sum_of_Prime+=%a ) &cls)
& echo %Sum_Of_Prime%

It will return the last result and
So, There is not anything else what you don't want to see.

Have a Try!
9 Zan 发表于 2006-12-22 09:48 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
You are truely Bang!
10 发表于 2006-12-22 21:08 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
Originally posted by zh159 at 2006-12-22 09:10:
for /l %%i in (1,2,99) do set /a num+=%%i

你少了“,”号


可以不加逗号的.
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
PPdos +1 2006-12-26 19:43
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
11 发表于 2006-12-22 22:13 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
UID 61449
来自 北京
状态 离线
其实for /l %i in (1,1,99) do @echo %i 括号中间的分隔号有多种
形式如下:
for /l %i in (1,1,99) do @echo %i
for /l %i in (1 1 99) do @echo %i
for /l %i in (1;1;99) do @echo %i
for /l %i in (1=1=99) do @echo %i
for /l %i in (1<tab>1<tab>99) do @echo %i <tab>----tab键
本帖最近评分记录 (共 3 条) 点击查看详情
评分人分数时间
namejm +4 2006-12-22 22:19
ccwan +5 2006-12-22 22:54
redtek +5 2006-12-26 21:46
我今后在论坛的目标就是做个超级坏人!!!
12 发表于 2006-12-22 22:21 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  9527 兄依然在孜孜不倦地研究各种技巧,往往能收到出其不意或简洁高效的效果,赞赏。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
13 发表于 2006-12-26 13:07 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
@echo off
for /l %%i in (1 2 99) do set /a num+=%%i
echo %num%
pause
加上红色部分就可以了
14 发表于 2007-01-26 21:27 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
厉害。
论坛跳转: