Algorithm 不大于或小于运算符的较大值
这只是为了好玩 你能给我一个方法来确定两个数的较大值吗?您可以使用除大于或小于运算符之外的其他运算符 使用任何你喜欢的工具(编程语言、铅笔纸等)。 还有一件事你不能做:Algorithm 不大于或小于运算符的较大值,algorithm,max,Algorithm,Max,这只是为了好玩 你能给我一个方法来确定两个数的较大值吗?您可以使用除大于或小于运算符之外的其他运算符 使用任何你喜欢的工具(编程语言、铅笔纸等)。 还有一件事你不能做: intmain() { int num1,num2; cin>>num1>>num2; if((num1-num2)+abs(num1-num2)) 不能包含 cout这适用于正整数: #! /usr/bin/python import math def bigger (a, b): length = int (mat
intmain()
{
int num1,num2;
cin>>num1>>num2;
if((num1-num2)+abs(num1-num2))
不能包含
cout这适用于正整数:
#! /usr/bin/python
import math
def bigger (a, b):
length = int (math.log (a, 2) + math.log (b, 2) + 1)
a = toFixedBitString (a, length)
b = toFixedBitString (b, length)
print a, b
while a:
if a [0] == '1' and b [0] == '0':
print "First number is bigger."
return
if a [0] == '0' and b [0] == '1':
print "Second number is bigger."
return
a = a [1:]
b = b [1:]
print "Numbes are equal."
def toFixedBitString (a, length):
retVal = ''
for x in range (length): retVal = ['0', '1'] [a >> x & 1] + retVal
return retVal
如果你假设2的补码运算:
int highBit = ~INT_MAX;
int rslt = num1 - num2;
if (rslt & highBit)
// num2 > num1
else if (rslt)
// num1 > num2
else
// num1 == num2
这仅在两个数字都为正数时有效。例如,如果num1
为正数而num2
为负数,则num1-num2
可能溢出,导致结果为负数,这将错误地报告num2>num1
。如果两个数字都为负数,则会报告相反的结果(即,-12将报告大于-1)。警告:未测试代码
num2 ~= num2;
++num2;
num1 += num2;
rotate_left(num1, 1);
if (num1 == 0)
std::cout << "num1 == num2";
else if (num1 & 1)
std::cout << "num1 < num2";
else
std::cout << "num1 > num2";
num2~=num2;
++num2;
num1+=num2;
向左旋转_(num1,1);
如果(num1==0)
标准::coutSSE 4.1溶液
#包括
#包括
使用名称空间std;
int main()
{
int num1,num2,测试;
__m128i v1,v2,vcmp;
cin>>num1>>num2;
v1=_mm_set1_epi32(num1);
v2=毫米设置1毫米epi32(平方毫米);
vcmp=mm_cmpgt_epi32(v1,v2);
测试=_mm_testz_si128(vcmp,vcmp);
如果(测试==0)
{
不能包含
int a=-1;
int b=-11;
//正差为true
bool dpos=~(unsigned int)(a-b)>>数字限制::数字;//31表示32位
cout负值的对数未定义;不同的语言/框架处理它的方式不同。此解决方案适用于C#:
使用系统;
公开课考试
{
公共静态bool gt(双a、双b){
返回Double.IsNaN(Math.Log(b-a));
}
公共静态无效报告(双a、双b){
if(gt(a,b))
WriteLine({0}大于{1}),a,b);
其他的
WriteLine(“{0}小于或等于{1}”,a,b);
}
公共静态void Main()
{
测试报告\u gt(-1,0);
试验报告(1,0);
试验报告(1,2);
试验报告(gt(-1,-2);
}
}
输出:
-1 is less than or equal to 0
1 is greater than 0
1 is less than or equal to 2
-1 is greater than -2
一个类似的C解决方案可以使用浮点异常。不幸的是,C++在这个有趣的竞赛中不会为一个否定的参数抛出一个异常的代码,以<代码> Log2()/代码>为一个好的尝试捕获解决方案。.
好的,我会把它们转换成二进制代码,然后从左边一个字节一个字节地走。如果第一个有1
,而另一个没有(意思是:有0
),这个值会更大
所以如果你从左到右,然后:
在当前位置都有0
:转到下一个位置
在当前位置都有1
:转到下一个位置
第一个在当前位置有1
,第二个有0
:第一个更大
第二个在当前位置有1
,第一个有0
:第二个更大
如果您确定3.或4.匹配,则得到结果。如果1.或2.匹配,则对下一个位置重复相同的操作。如果您已遍历所有字节,但未确定其中一个较大,则两者相等。问题很好,但我不确定stackoverflow是问这个问题的正确位置。也许这会更好-适合程序员。SE.com?听起来像是有趣的家庭作业。即使允许,您的示例也不会提供正确的答案。您所要做的就是将1
添加到num1
,直到它等于num2
或INT_MAX
-)任何更复杂的操作都违反了仅在这是一个已证明的需求!可能的重复我认为这是使用大于或小于运算符。@GWW:这取决于std::max是如何实现的,我们当然不能对此做出任何假设。;-“什么是向左旋转”
?
-1 is less than or equal to 0
1 is greater than 0
1 is less than or equal to 2
-1 is greater than -2