![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-26 02:05 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [挑战2] 变量的检测和计算[难度:★] |
| 可打印版本 4,669 / 38 |
| 第16楼 flyinspace | 发表于 2007-05-01 05:35 |
| 银牌会员 发帖 517 积分 1,206 | |
Originally posted by bjsh at 2007-4-30 04:16 PM: 不错,但会产生临时文件。 其实有办法不产生临时文件的。。youxia01 给了我们最好的提示:) |
|
| 第17楼 bjsh | 发表于 2007-05-01 05:44 |
| 银牌会员 发帖 621 积分 2,000 | |
|
本来也不想产生临时文件;
本来想把/替换为alt+13; 不过没有实现我的想法;真想去debug看看; 无奈时间比较紧.; 就写了下来.. |
|
| 第18楼 zhoushijay | 发表于 2007-05-01 05:50 |
| 高级用户 发帖 375 积分 845 | |
|
set "num1=qwer/asdf2/asd34f/1234567890123456/asdf/aaaa"
set "num2=aaaaa2/23456789012345678/asdfssasd/asdaa" 这2个数应该是 2341234567890123456 + 223456789012345678 ----------------------------------------- 2564691356902469134 这样的吧,前面字母里还夹杂着数字呢 [ Last edited by zhoushijay on 2007-4-30 at 04:52 PM ] |
|
| 第19楼 flyinspace | 发表于 2007-05-01 06:07 |
| 银牌会员 发帖 517 积分 1,206 | |
Originally posted by zhoushijay at 2007-4-30 04:50 PM: 噢。我们只要纯数字的那一组组合呀。。 |
|
| 第20楼 lxmxn | 发表于 2007-05-01 06:20 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by bjsh at 2007-4-30 16:44: 要把/替换成换行,可以参考一下这个: |
|
| 第21楼 everest79 | 发表于 2007-05-01 06:28 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
我原来写过的一个大数加法,根据要求改了一下
|
|
| 第22楼 flyinspace | 发表于 2007-05-01 06:38 |
| 银牌会员 发帖 517 积分 1,206 | |
|
SET/A1/T2&&SET/AT1=T1+1
SET/AT2=1/(T1/10)||SET T2=0 这个有点不明白?? SET/A1/T2 && SET/AT1=T1+1 event79兄可以解释一下么? |
|
| 第23楼 everest79 | 发表于 2007-05-01 06:47 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
这个是按字符位由右向左递增进行个位数相加
SET/A1/T2&&SET/AT1=T1+1 //set /a 1/t2这个来判断t2(t2为上一循环进位)是否为零,若不是,将当前结果t1加一 SET/AT2=1/(T1/10)||SET T2=0 //set /a t2=1/(t1/10)这个判断当前循环结果(t1)是否大于10,若大于十,t2将被赋值为一(下一循环上一步),若小于十,则将进位t2置为零 |
|
| 第24楼 flyinspace | 发表于 2007-05-01 06:56 |
| 银牌会员 发帖 517 积分 1,206 | |
Originally posted by everest79 at 2007-4-30 05:47 PM: 谢谢兄的说明,我理解了这句话的含义! 新的问题是: 为什么要 set/a1/t2&&set/at1=t1+1 加这个 / 有什么用? 按你的说法:这句话相当于> set /a xxx= 1 / t2 利用 set /a 的特殊性: 若 xxx 小于1,则 xxx= 0 为 0 满足条件。则 t2 += 1 又学到了一招。。有点类似 set /p 的感觉?且不要=号。 |
|
| 第25楼 everest79 | 发表于 2007-05-01 07:00 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
set /a a=1+1可以缩写为set/aa=1+1,那时我刚打别人实例上看到这个,所以就这么给写上了,不算好的书写习惯
|
|
| 第26楼 flyinspace | 发表于 2007-05-01 07:06 |
| 银牌会员 发帖 517 积分 1,206 | |
Originally posted by everest79 at 2007-4-30 06:00 PM: set /a a=1/a 也相当于 set /a1/a?? |
|
| 第27楼 everest79 | 发表于 2007-05-01 07:59 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
不是的
set /a a=1/a是计算赋值 set /a 1/a只是计算 |
|
| 第28楼 youxi01 | 发表于 2007-05-02 17:35 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
21F的代码似乎有点点问题,要继续修改下:
测试如下: 自己也发一段不成熟的代码(如果段数较多时,效率较高): |
|
| 第29楼 flyinspace | 发表于 2007-05-02 19:02 |
| 银牌会员 发帖 517 积分 1,206 | |
Originally posted by youxi01 at 2007-5-2 04:35 AM: 代码看得好累。。 有没有算法?? 给个提示? |
|
| 第30楼 youxi01 | 发表于 2007-05-03 15:17 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
::code by youxi01@cn-dos.net
@echo off & setlocal enabledelayedexpansion set "str1=qwer/asdf2/asd34f/13546641/asdf/aaaa" set "str2=aaaaa2/45321/asdfssasd/asdaa" call :GetNum "%str1%" num1 call :GetNum "%str2%" num2 call :Split %num1% REM Mnum保存结果的段数(用来接受最大的段数); REM 将num的值重新归0,用来继续调用"函数" REM flag为进位标记,如果为1,则下段数字加1;这里为初始值,设置为1。 set/a Mnum=%num%,num=0,flag=0 call :Split %num2% if %Mnum% LSS %num% set/a Mnum=%num% set/a Mnum_=%Mnum%-1 for /l %%i in (1 1 %Mnum_%) do ( set/a Rnum%%i+=!flag! if !Rnum%%i! GTR 10000 set/a flag=1 REM 在前面加000,是为了补齐数字的,防止333这样位数不足4位的数字。 set Rnum%%i=000!Rnum%%i! set Rnum%%i=!Rnum%%i:~-4! set Rstr=!Rnum%%i!!Rstr!) set/a Rnum%Mnum%+=%flag% echo !Rnum%Mnum%!!Rstr! pause>nul :GetNum OBJ Res for /f "delims=/ tokens=1,*" %%i in ("%~1") do ( REM 利用是否大于a,来检测是否是数字,如果是,则一定小于a(不管是多少位的数字) REM 如果检测到数字,则退出。 if %%i LSS a set %2=%%i & goto :eof REM 循环检测; call :GetNum "%%j" %2 ) & goto :eof :Split OBJ set str=%~1 set/a num+=1 REM 如果,切割后的数字小于10000,则设置自身的值为原值加上该数字,并退出; if %str% LSS 10000 set/a Rnum%num%+=%str% & goto :eof REM 利用willsort的办法,屏除类似0001给利用set/a计算带来的错误; set/a Rnum%num%+=10000%str:~-4%%%10000 set str=%str:~0,-4% call :Split "%str%" |
|
| 上一页 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |