inc 或 dec 的最短路径是int
的绝对值,但保留符号({{1 }} +
)?
-
(我确定它不是那么难,但我可能最终会得到一些代码。但我想知道我是否可以制作那么短的1-liner?)。我还删除了C#标签,因为这可能对各种语言都很有用。
答案 0 :(得分:17)
IF 0应该保留为0:因为Math.Sign
返回+1,-1或0,你可以这样做:
a += Math.Sign(a);
答案 1 :(得分:4)
如果你想要1作为答案,如果你喂它0,这是一种方式:
a = Math.Sign(a) * (Math.Abs(a) + 1)
答案 2 :(得分:4)
我认为在线比较比绝对呼叫便宜:
int res = a + (a >= 0 ? 1:-1)
这假设0是正数。
答案 3 :(得分: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#中不存在。我没有注意标签......