72 [面试题]如果不使用if-else和比较运算符,你知道如何求解2个数字中的较大一个吗?
【本文链接】
http://www.cnblogs.com/hellogiser/p/max-of-numbers-without-comparations.html
【题目】
不使用if-else和比较运算符,求解2个整数中的较大数。
【分析】
(1) 如果a>=b,那么返回a,否则返回b。
(2) 也就是说,如果a-b>=0,那么返回a,否则返回b。
(3)如果a-b>=0,让k=0,否则让k=1,返回a-k*(a-b)。
(4)从(3)中可以看出,如果让k等于a-b这个数字的符号位,那么刚好可以满足要求。
(5)让c=a-b,k等于c的符号位,返回a-k*c。
【代码】
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// 72_Max_of_2Numbers_without_ifelse.cpp : Defines the entry point for the console application.
// /* version: 1.0 author: hellogiser blog: http://www.cnblogs.com/hellogiser date: 2014/9/18 */ #include "stdafx.h" #include "iostream" using namespace std; int Max(int a, int b) { int c = a - b; int k = (c >> 31) & 0x1; int max = a - k * c; return max; } int _tmain(int argc, _TCHAR *argv[]) { return 0; } |
【本文链接】
http://www.cnblogs.com/hellogiser/p/max-of-numbers-without-comparations.html