::  ::  ::  ::  :: 管理

命令行下通过四则运算得到绝对值

Posted on 2008-06-16 05:56 nt05 阅读(382) 评论(0)  编辑 收藏 引用 所属分类: windows nt
大概如下

set /p a=input
set /a b=算法
%b%为输入数字的绝对值

不使用字符替换或IF判断

2007-1-17 12:58 PM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

namejm
荣誉版主

batch fan


积分 5094
发帖 1727
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  最简单的办法是用字符串替换语句,演示代码如下:
CODE:  [Copy to clipboard]
@echo off
set input=
set /p input=请输入实数:
echo %input:-=%
pause
——————————————————
  居然是不要字符替换的,还不允许用if语句,真是太BT了,不知道你这样要求有什么特殊需要。再来一个:
CODE:  [Copy to clipboard]
@echo off
set input=
set /p input=请输入实数:
for /f "tokens=* delims=-" %%i in ("%input%") do echo %%i
pause
[ Last edited by namejm on 2007-1-17 at 12:33 AM ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-17 01:27 PM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

everest79
银牌会员

一叶枝头,万树皆春



积分 2067
发帖 853
注册 2006-12-25
状态 离线
『第 3 楼』:  

嘿嘿,版主你作弊,我要通过计算来得到绝对值,想了一下午了

2007-1-17 01:42 PM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

redtek
金牌会员





积分 2897
发帖 1149
注册 2006-9-21
状态 离线
『第 4 楼』:  

第1种方法: 负负得正原理
CODE:  [Copy to clipboard]
@echo off

set /p var=请输入负数:
set /a var=-%var%

echo 绝对值为: %var%
计算有小数点儿的数字出错~:)
计算正数出错:)



第2种方法: (负数)-(负数)*2 =(绝对值)
CODE:  [Copy to clipboard]
@echo on

set /p var=请输入负数:
set /a var=%var%-%var%*2

echo 绝对值为: %var%
不支持浮点运算
只支持求负数的绝对值(输入正数则出错)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-1-17 10:23 PM
查看资料   发送邮件  发短消息 网志   编辑帖子  回复  引用回复

scriptor
银牌会员




积分 1194
发帖 544
注册 2006-12-21
状态 离线
『第 5 楼』:  

I got one:

@echo off
set /p n="Input any negative number: "
set /a m=~n+1
echo The absolute of %n% is: %m%
pause >nul

It's too easy by using it.

No decimal fraction, but zero is permitted.

[ Last edited by scriptor on 2007-1-17 at 11:16 AM ]

2007-1-17 11:30 PM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

qzwqzw
银牌会员

天的白色影子


积分 1907
发帖 491
注册 2004-3-6
状态 离线
『第 6 楼』:  

一个粗劣的例子

a取值的上下限各缩小一半

set /a b=(a*2+1)%%2*a

   此帖被 +22 点积分     点击查看详情   
评分人:【&sid=igEPnz everest79 分数: +4 时间:2007-1-18 01:12 AM
评分人:【&sid=igEPnz redtek 分数: +9 时间:2007-1-18 02:39 AM
评分人:【&sid=igEPnz namejm 分数: +4 时间:2007-1-18 10:23 AM
评分人:【&sid=igEPnz lxmxn 分数: +4 时间:2007-1-18 11:10 AM
评分人:【&sid=igEPnz minmin888 分数: +1 时间:2007-5-4 10:58 AM


2007-1-17 11:37 PM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

scriptor
银牌会员




积分 1194
发帖 544
注册 2006-12-21
状态 离线
『第 7 楼』:  

请把它删除了
写错了

[ Last edited by scriptor on 2007-1-17 at 11:14 AM ]

2007-1-17 11:47 PM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

scriptor
银牌会员




积分 1194
发帖 544
注册 2006-12-21
状态 离线
『第 8 楼』:  

请版主把它删除了

[ Last edited by scriptor on 2007-1-17 at 11:12 AM ]

2007-1-17 11:51 PM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

qzwqzw
银牌会员

天的白色影子


积分 1907
发帖 491
注册 2004-3-6
状态 离线
『第 9 楼』:  

scriptor兄

给你两个建议

1、多用中文

2、多做测试

2007-1-17 11:59 PM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

scriptor
银牌会员




积分 1194
发帖 544
注册 2006-12-21
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by qzwqzw at 2007-1-17 10:59:
scriptor兄

给你两个建议

1、多用中文

2、多做测试

你是说8楼的代码吗?
对不起,搞错了,那个只能计算奇数

谢谢你了

我一时性急就发过来了

2007-1-18 12:09 AM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

qzwqzw
银牌会员

天的白色影子


积分 1907
发帖 491
注册 2004-3-6
状态 离线
『第 11 楼』:  不尽如此

对于#4中的 ~n+1 代码,不知你是否拿正整数做过测试?

另外保持版面的简洁是我们共同的义务

2007-1-18 12:15 AM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

scriptor
银牌会员




积分 1194
发帖 544
注册 2006-12-21
状态 离线
『第 12 楼』:  

我在那里已经说明了:
@echo off
set /p n="Input any negative number: "
是输入负数。

谢谢。记住了
我发现这几天来我犯了很多的错误啊。
真的不好意思再发帖子了

2007-1-18 12:19 AM
查看资料   发短消息 网志   编辑帖子  回复  引用回复

everest79
银牌会员

一叶枝头,万树皆春



积分 2067
发帖 853
注册 2006-12-25
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by qzwqzw at 2007-1-17 10:37 AM:
一个粗劣的例子

a取值的上下限各缩小一半

set /a b=(a*2+1)%%2*a