[問題] 不用if-else, for, while, do-while取絕

作者: CaliforCat (加州貓)   2016-04-06 23:33:15
對一個整數取絕對值
如果不用到if-else, for, while, do-while
可以使用什麼方法
我想到的都是會用到上列的限制...
請前輩指教 謝謝
作者: Hazukashiine (私は幸せです)   2016-04-06 23:35:00
#include<stdlib.h> int abs(int);
作者: james732 (好人超)   2016-04-06 23:39:00
goto (?)
作者: Hazukashiine (私は幸せです)   2016-04-06 23:41:00
int pos = ((num < 0) ? (num * -1) : (num));
作者: Frozenmouse (*冰之鼠*)   2016-04-06 23:48:00
補數?
作者: Caesar08 (Caesar)   2016-04-06 23:50:00
能請問為甚麼不能用這些方法嗎?
作者: Schottky (順風相送)   2016-04-06 23:51:00
應該是跟人打賭吧,接受板眾插花嗎?
作者: x000032001 (版廢了該走了)   2016-04-07 00:05:00
相乘再開根號就好啦 國中就有教了(被打
作者: TobyH4cker (Toby (我要當好人))   2016-04-07 00:23:00
num = num & (~(1<<(sizeof(int)*8-1)));這樣試試看?我剛想到的錯了 ˊˋnum = ((~num) & (~(1 << (sizeof(int)*8 - 1)))) + 1還是不對
作者: ronin728 (浪人)   2016-04-07 03:37:00
(a < 0)? -a : a;
作者: CaptainH (Cannon)   2016-04-07 04:32:00
a*((a>0)*2-1)
作者: TobyH4cker (Toby (我要當好人))   2016-04-07 08:08:00
其實龜毛點上面都算是if-else跟if不過C大的方法讓我知道怎麼簡化了XD
作者: EdisonX (卡卡獸)   2016-04-07 08:28:00
-x = ~x + 1 ??
作者: TobyH4cker (Toby (我要當好人))   2016-04-07 08:31:00
Yes
作者: EdisonX (卡卡獸)   2016-04-07 08:31:00
看錯了,忽略我的 @@
作者: kerwinhui (kezza)   2016-04-07 12:17:00
作者: CoNsTaR ((const *))   2016-04-08 02:36:00
不就 num &= -num 就好了嗎?對 int 應該是 OK 的呃…應該是(int)((unsigned)num &= (unsigned)-num) 才對
作者: TobyH4cker (Toby (我要當好人))   2016-04-08 09:32:00
-5 & 5 = 1 ?
作者: jackalwei (旅人)   2016-04-08 10:06:00
想到最簡單的做法就是,num*(1-2*符號)num為正,符號為0,就為num*1得解,反之*-1,負負得正,亦得解怎麼找出符號,只要用shift就可以達成了
作者: newInLA (newInLA)   2016-04-11 07:14:00
沒說不能用switch呀,ㄎㄎswitch(num < 0) case true: return (num * -1);
作者: cobrasgo (人魚線變成鮪魚線,超帥)   2016-04-11 17:54:00
switch裡的嚴格講來算是if else

Links booklink

Contact Us: admin [ a t ] ucptt.com