博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程急转弯
阅读量:5287 次
发布时间:2019-06-14

本文共 839 字,大约阅读时间需要 2 分钟。

编程急转弯

题目

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

解题思路

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

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

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

#include 
#include
using namespace std;int main(){ cout << "Just give me numbers!" << endl; int a; int b; cin >> a >> b; function
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|。

转载于:https://www.cnblogs.com/JacZhu/p/6032029.html

你可能感兴趣的文章
文件序列化
查看>>
Bootstrap--响应式导航条布局
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>