• 编程急转弯


    编程急转弯

    题目

    给定两个 int 型变量,如何在不使用条件运算符以及条件判断语句的情况下,输出较大的那个数?

    解题思路

    根据简单的数学知识可得:

    Max(a,b) = ((a + b) + |a - b|)) / 2;

    那么就可以写下以下的代码:

    #include <iostream>
    #include <functional>
    using namespace std;
    
    int main()
    {
        cout << "Just give me numbers!" << endl;
        int a;
        int b;
        cin >> a >> b;
        function<bool(int, int)> fucker = [](int a, int b)->bool
        {
            return (bool)~((a - b) >> 31);
        };
        int bigger = ;
        cout << "The bigger one is " << ((a + b) + (int)fucker(a, b) * (a - b) + (int)fucker(b, a) * (b - a)) / 2 << endl;
    }
    

    这里第 10 行的 fucker 函数就是为了解决取绝对值的问题:

    我们知道,Int 32 的最高位指示的是数值的正负,正数的最高位是 0,负数的最高位是 1,所以右移 31 位,正数就会变成 0,负数就会变成 -1(也就是 0xFFFFFFFF)。然后再对移位结果取反,并强制转换为 bool 类型,这样正数就变成了 1 ,负数就变成了 0

    之后,我们就可以通过

    (int)fucker(a, b) * (a - b) + (int)fucker(b, a) * (b - a))
    

    求出 |a - b|。

  • 相关阅读:
    Ubuntu系统下《汇编语言》环境配置

    GetDiskFreeSpaceEx的使用
    夏走了
    小笨妞
    项目管理怎么可以这样子!


    浪费
    查找文件夹
  • 原文地址:https://www.cnblogs.com/JacZhu/p/6032029.html
Copyright © 2020-2023  润新知