对于inc或dec保持符号(+
-
)的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#标签,因为这可能对所有类型的语言都很有趣
IF 0应保留为0:由于Math.Sign
返回+1、-1或0,因此可以执行:
a += Math.Sign(a);
我认为在线比较比abs调用便宜:
int res = a + (a >= 0 ? 1:-1)
这假设0是一个正数。
如果你想让1成为答案,如果你给它0,这里有一种方法:
a = Math.Sign(a) * (Math.Abs(a) + 1)
由于问题中删除了C#标记,我想提供以下(C)答案:
#define absInc(a) ((a<0)?(--a):(++a))
一旦你把它放在你的头中,你就可以在你的代码中做以下事情(经过测试,有效):
int a = -4;
absInc(a);
printf("a is now %dn", a);
结果:-5
我重新发布了这篇文章,因为我最初的(类似的)答案得到了很多反对票,因为C#中不存在这种类型的构造。我没有注意标签。。。