zoukankan      html  css  js  c++  java
  • 编程急转弯

    编程急转弯

    题目

    给定两个 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|。

  • 相关阅读:
    ideaIU-2017.1.1.exe安装、注册、汉化IntelliJ IDEA
    504 Gateway Timeout 异常
    Windows下80端口被进程System占用的解决方法
    D2Admin基本使用
    MySQL 教程
    Element 插件
    VSCode-Element-Helper
    ECharts 教程
    JSP 教程
    Kotlin 教程 Android 官方开发语言
  • 原文地址:https://www.cnblogs.com/JacZhu/p/6032029.html
Copyright © 2011-2022 走看看