![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 14:55 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [挑战4]: 乱序数值的提取与计算 [难度:★☆] |
| 可打印版本 3,143 / 22 |
| 第1楼 flyinspace | 发表于 2007-05-01 06:02 |
| 银牌会员 发帖 517 积分 1,206 | |
|
[挑战4]: 乱序数值的提取与计算 [难度:★☆] ----------------------------------------------------------------------------------------------------
set "num1=flyi2007tianya04a30weltia16350pla1234567890y" set "num2=cn2102-dos4567aza1156.azx17173163lix;aeac1234567890v" 要求:提取所有的数字。例如: num1中,我们要提取出 : 2007 04 30 16350 1234567890这五个数值。 并计算 2007*4*30*16350*1234567890 的结果。 ---------------------------------------------------------- 同样的,在num2中,我们也要计算提取出来的数字的乘积。 然后比较 num1 和 num2 的大小。 获得 num1-num2 的精确结果。并输出。(科学计数法无效) 难点: 乱序数值的提取(无规律),乘法和减法的溢出位计算。大数的比较。 目标人群:针对会活用CMD基础的人 编写积分奖励:4分,完成难点中任意一点的人都可以获得一分的奖励 限制:不得使用第三方工具 使用:cmd(help中包含的指令).vbs 自带的函数库(不得使用 windows 的api。) ps : 积分不是目的。。重要的是,我们可以完成这样的挑战。。 请大家根据自己的能力尽力编写吧:) --------------------------------------------------------------------------------------------------------- 挑战系列5后,将会在每周一的时间里出一期新的挑战系列。 望各位高手鼎立支持。 个人代码随后奉上。 [ Last edited by flyinspace on 2007-4-30 at 05:48 PM ] |
|
| 第2楼 zhoushijay | 发表于 2007-05-01 06:25 |
| 高级用户 发帖 375 积分 845 | |
|
最后的 1234567890 不需要乘吗? num1和num2是不是指乘过后的积
|
|
| 第3楼 flyinspace | 发表于 2007-05-01 06:28 |
| 银牌会员 发帖 517 积分 1,206 | |
|
不好意思,我的疏忽。。
最后的1234567890也需要代入乘积的。。 num1 和 num 2 的值为提取出来的数值的乘积。 当然你也可以用 其他的变量来表示。 [ Last edited by flyinspace on 2007-4-30 at 05:30 PM ] |
|
| 第4楼 lxmxn | 发表于 2007-05-01 06:30 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re flyinspace:
感谢兄发的几个“挑战”系列的贴子,这样是非常有意义的,不仅有利于大家的技术交流,更有利于论坛的发展和人气的提升,特加分鼓励一下。 |
|
| 第5楼 flyinspace | 发表于 2007-05-01 06:33 |
| 银牌会员 发帖 517 积分 1,206 | |
Originally posted by lxmxn at 2007-4-30 05:30 PM: 呵呵,谢谢斑竹的加分,但我们更期待的是:斑竹精彩的代码回复。 |
|
| 第6楼 flyinspace | 发表于 2007-05-02 14:02 |
| 银牌会员 发帖 517 积分 1,206 | |
|
这一题:
我也没有想到好法子。。本想利用人工演算乘法的方法解决(无奈代码太多,其中甚至包含了(加法,移位,减法)) 如此一来,代码实在比较长了。个人对这一题的难度把握错误(而且计算乘法运算的时候,尚有部分数据会有点差错,研究原因中……) 认为此题的难度应该为:☆☆☆ 不知各位达人有什么更好的方法没? |
|
| 第7楼 slore | 发表于 2007-05-02 15:42 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
提取比较都简单就是要精确非E或D的表达这个不好实现。。。。
|
|
| 第8楼 flyinspace | 发表于 2007-05-02 17:11 |
| 银牌会员 发帖 517 积分 1,206 | |
|
嗯。提取的确好简单的。。。
主要是乘法运算不出错的表达很困难。。 两个数相乘。若两个数字的长度小于等于9 则调用自带的来完成。。 但若两个数都大于9。。 感觉人工算法不太好。。 有点想考虑 使用 2进制的方法来表达了。。但用批处理会算死人的。 而且批处理,又有一点搞不好了。 例如: set xx=123123。 不知道如何用最简单的方法修改第二个数字2 为我所需要的数字。。 只会调用函数相互更改。 批处理数组的功能太弱。。 真有点想用c++来解决问题。 |
|
| 第9楼 slore | 发表于 2007-05-02 17:19 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
set xx=123123
set yy=%xx:~0,1%S%xx:~2,-1% echo %yy% pause 晕,最后位不好取,要么获取长度那也麻烦=。= |
|
| 第10楼 flyinspace | 发表于 2007-05-02 17:21 |
| 银牌会员 发帖 517 积分 1,206 | |
|
长度可以不用担心。
因为若不指定长度的话。会给出默认值的。 不过我的方法是调用函数获取长度。 |
|
| 第11楼 youxi01 | 发表于 2007-05-02 17:39 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
5.1假期没人陪,也上不了网,很郁闷。倒也多出了时间来思考人生的问题(庸庸碌碌、浑浑噩噩),也有了时间来讨论 联盟上的问题,呵呵。
写了一段 很混乱 的代码,欢迎测试指正。 |
|
| 第12楼 flyinspace | 发表于 2007-05-02 17:47 |
| 银牌会员 发帖 517 积分 1,206 | |
略略测试了一下。。发现 乘法方面做得不错。。。 但,,计算差值方面有问题。。不能正确计算出两者间的差值。。。 |
|
| 第13楼 youxi01 | 发表于 2007-05-02 17:50 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
是吗?
最好贴个错误结果出来看看,我看下错在哪里啊? |
|
| 第14楼 youxi01 | 发表于 2007-05-02 18:14 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
TO :flyinspace
我真的没发现问题哦,你如果发现了问题,快点提出来啊?! |
|
| 第15楼 flyinspace | 发表于 2007-05-02 18:23 |
| 银牌会员 发帖 517 积分 1,206 | |
你自己看吧。。。这个结果可能么?? |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |