在不使用任何条件或比较运算符的情况下执行以下操作。
if (Number <= 0)
{
Print '0';
}
else
{
print Number;
}谢谢..
发布于 2009-05-18 07:17:12
我最初的简单解决方案是:
1. print( (abs(Number)+Number) / 2 )这种解决方案在大多数情况下都有效,除非数字非常大(超过最大数字的一半,例如>= MAX_INT/2),在这种情况下,相加可能会导致溢出。
以下解决方案解决了溢出问题:
2. print( (abs(Number)/2) + (Number/2) )但是,可能有这样一种情况,数字是并且必须保持整数,并且除法运算符(/)是整数除法,因此7/2=3。在这种情况下,解决方案2将不起作用,因为如果为Number=7,它将打印6(对于这种情况,解决方案1将工作得很好)。
因此,如果我们需要同时处理大数和整数算术,下面的怪胎就来了,在奇数整数的情况下,添加了在除以2的过程中可能丢失的1的补偿:
3. print(
( (abs(Number)/2)+(Number/2) ) +
((
(Number-(2*(Number/2))) +
(abs(Number)-(2*(abs(Number)/2)))
) / 2)
) 发布于 2009-05-18 07:17:09
print max(0, number)发布于 2009-05-18 09:16:29
假设该数字由一个8位二进制补码整数表示。
包括0在内的正数都将MSB设置为0。
所有负数都将MSB设置为1。
因此,我们采用MSB的补码,将其扩展到完整的8位,并将其与原始数字进行逐位与运算,例如
正面:
00110101 ->最高有效位为0
11111111扩展的->补丁
00110101 ->按位AND或以上
否定:
10110101 -> MSB为1
00000000扩展的->补丁
00000000 ->按位AND或以上
不需要比较-我假设这是按位的,并不是严格意义上的比较。
另外,很抱歉没有代码,但是你明白我的意思。
https://stackoverflow.com/questions/876550
复制相似问题