首页 > 代码库 > 不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
以下五种方法分别求出较大的数和较小的数的方法。较小数的代码在注释中,但未运行测试。
int Find1(int a, int b) { return ((a + b) + abs(a - b)) / 2; //return ((a + b) - abs(a - b)) / 2; } /* 当a大于b时,a-b为正,右移sizeof(int) * 8 - 1后,最右侧一位为0,0^1 = 0; 当a小于b时,a-b为负,右移后最右侧一位为1,1^1 = 1 */ int Find21(int a, int b) { int c[2] = {a, b}; int z = a - b; z = (z >> (sizeof(int) * 8 - 1)) & 1; return c[z]; /* int c[2] = {b, a}; int z = a - b; z = (z >> (sizeof(int) * 8 - 1)) & 1; return c[z]; */ } int Find22(int a, int b) { int flag = ((a - b) >> (sizeof(int) * 8 - 1)) & 1; return (a - (a - b) * flag); //return (b - (b - a) * flag); } int Find3(int a, int b) { int c[2] = {a, b}; return c[a < b]; //return c[a > b]; } /* 该方法对于两个数均为负数的情况以及有数为0的情况 没法处理,但这里也列出该方法。 a<b时,a/b=0,所以被除数为b*(b/a),除数为b/a,结果是b a=b时,a/b=1,所以被除数为a+b=2a,除数为2,结果是a a>b时,b/a=0,所以被除数为a*(a/b),除数为a/b,结果是a */ int Find4(int a, int b) { int larger = (a*(a/b) + b*(b/a))/(a/b + b/a); //long smaller = (b*(a/b) + a*(b/a))/(a/b + b/a); return larger; } int main() { int a, b; while (1) { cin >> a >> b; cout << Find1(a, b) << " "; cout << Find21(a, b) << " "; cout << Find22(a, b) << " "; cout << Find3(a, b) << " "; cout << Find4(a, b) << endl; } }
不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。