2013-12-12 36 views
5

什麼是INCint的絕對值,而是最短的方式保持跡象+-)?增加int保留符號的絕對值?

int a = 5; 
int b = -7; 
// increment abs of both 
// a -> 6 
// b -> -8 
// incrementing 0 wasn't interesting me, I guess it can stay 0 

(我敢肯定,這並不難,但是我會可能與一些代碼行結束了,但我不知道是否可以作出這樣很短,1襯?)。我還刪除了C#標記,因爲這可能對各種語言都很有趣。

+6

0應該發生什麼? – Servy

+0

@ mini-me - 你有兩個很好的答案 - 一個保留零,另一個增加它。你能消除歧義嗎? – Floris

回答

17

如果爲0,應保留爲0:自Math.Sign回報+ 1,-1,或0,你可以這樣做:

a += Math.Sign(a); 
+2

繁榮。非常非常好的回答傢伙。 – Almo

+3

我喜歡這個,乾淨簡單。 – CodeLikeBeaker

4

如果你想1是答案,如果你給它0,這裏有一個辦法:

a = Math.Sign(a) * (Math.Abs(a) + 1) 
4

我想像的在線比較是不是ABS通話便宜:

int res = a + (a >= 0 ? 1:-1) 

這裏假設0是一個正數。

+3

或者如果你只是想更新變量'a + = a> = 0? 1:-1;' –

1

由於C#標籤從取出的問題,我想提供該(C)答案:

#define absInc(a) ((a<0)?(--a):(++a)) 

,一旦你把這個在你的頭,你可以做你的代碼如下(測試工作):

int a = -4; 
absInc(a); 
printf("a is now %d\n", a); 

結果:-5

我重新張貼了這個,因爲我原來的(類似)的回答得到了很多downvotes,因爲這種類型的構造不會在C#中存在。我沒有注意到標籤...