對一個整數取絕對值
如果不用到if-else, for, while, do-while
可以使用什麼方法
我想到的都是會用到上列的限制...
請前輩指教 謝謝
#include<stdlib.h> int abs(int);
int pos = ((num < 0) ? (num * -1) : (num));
作者:
Caesar08 (Caesar)
2016-04-06 23:50:00能請問為甚麼不能用這些方法嗎?
num = num & (~(1<<(sizeof(int)*8-1)));這樣試試看?我剛想到的錯了 ˊˋnum = ((~num) & (~(1 << (sizeof(int)*8 - 1)))) + 1還是不對
作者:
CaptainH (Cannon)
2016-04-07 04:32:00a*((a>0)*2-1)
其實龜毛點上面都算是if-else跟if不過C大的方法讓我知道怎麼簡化了XD
作者:
EdisonX (卡卡獸)
2016-04-07 08:28:00-x = ~x + 1 ??
作者:
EdisonX (卡卡獸)
2016-04-07 08:31:00看錯了,忽略我的 @@
作者:
CoNsTaR ((const *))
2016-04-08 02:36:00不就 num &= -num 就好了嗎?對 int 應該是 OK 的呃…應該是(int)((unsigned)num &= (unsigned)-num) 才對
作者: 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:00switch裡的嚴格講來算是if else