【困难】不用任何比较判断找出两个数中较大的数-Java:解法一
分享一个大牛的人工智能教程。零基础通俗易懂风趣幽默希望你也加入到人工智能的队伍中来请轻击人工智能教程大家好欢迎来到我的网站 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑人工智能时代就要来临了科… 继续阅读 前言https://www.captainai.net/troubleshooterpackage live.every.day.ProgrammingDesign.CodingInterviewGuide.BitwiseOperation; /** * 不用任何比较判断找出两个数中较大的数 * * 【题目】 * 给定两个32位整数a和b返回a和b中较大的。 * * 【要求】 * 不用任何比较判断。 * * 【难度】 * 困难 * * 【解答】 * 第一种方法。得到a-b的值的符号就可以知道是返回a还是返回b。具体请参看如下代码中的getMax1方法。 * * sign函数的功能是返回整数n的符号正数和0返回1负数则返回0。flip函数的功能是如果n为1返回0如果n为0返回1。所 * 以如果a-b的结果为0或正数那么scA为1scB为0如果a-b的值为负数那么scA为0scB为1。scA和scB必有一个为1另一 * 个必为0。所以return a*scAb*scB;就是根据a-b的值的状况选择要么返回a要么返回b。 * * 但方法一是有局限性的那就是如果a-b的值出现溢出返回结果就不正确。 * * author Created by LiveEveryDay */ public class WithoutCompareFindTheBiggerOneInTwo1 { public static int flip(int n) { return n ^ 1; } public static int sign(int n) { return flip((n 31) 1); } public static int getMax1(int a, int b) { int c a - b; int scA sign(c); int scB flip(scA); return a * scA b * scB; } public static void main(String[] args) { int a 89; int b 98; System.out.printf(The bigger one is: %d, getMax1(a, b)); } } // ------ Output ------ /* The bigger one is: 98 */
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2622263.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!