不使用任何条件或比较运算符执行以下操作.
if (Number <= 0)
{
Print '0';
}
else
{
print Number;
}
Run Code Online (Sandbox Code Playgroud)
谢谢..
Roe*_*ler 13
我最初的简单解决方案
1. print( (abs(Number)+Number) / 2 )
Run Code Online (Sandbox Code Playgroud)
该解决方案在大多数情况下都有效,除非Number非常大(超过最大值的一半,例如Number> = MAX_INT/2),在这种情况下,加法可能会导致溢出.
以下解决方案解决了溢出问题:
2. print( (abs(Number)/2) + (Number/2) )
Run Code Online (Sandbox Code Playgroud)
但是,可能存在Number是且必须保持整数的情况,并且除法运算符(/)是整数除法,因此7/2 = 3.在这种情况下,解决方案2将无法工作,因为如果Number = 7,它将打印6(对于这种情况,解决方案1将正常工作).
因此,如果我们需要处理大数和整数运算,下面的怪物就会出现挽救,在奇数整数的情况下,在除法中可能会丢失1的补偿:
3. print(
( (abs(Number)/2)+(Number/2) ) +
((
(Number-(2*(Number/2))) +
(abs(Number)-(2*(abs(Number)/2)))
) / 2)
)
Run Code Online (Sandbox Code Playgroud)
print max(0, number)
Run Code Online (Sandbox Code Playgroud)
假设该数字由8位二进制补码整数表示.
包括0的正数都将MSB设置为0.
负数都将MSB设置为1.
因此,我们采用MSB的补码,将其扩展为完整的8位,并将其与原始数字进行按位AND,例如
正:
00110101 - > MSB为0
11111111 - > MSB的补充扩展
00110101 - >按位AND以上
负:
10110101 - > MSB是1
00000000 - >补充MSB扩展
00000000 - >按位AND以上
不需要比较 - 我有点假设按位AND并不是严格的比较.
此外,抱歉缺乏代码,但你明白了.