Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 不大于或小于运算符的较大值_Algorithm_Max - Fatal编程技术网

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