不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
2015-01-13 21:25
1086 查看
以下五种方法分别求出较大的数和较小的数的方法。较小数的代码在注释中,但未运行测试。
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; } }
相关文章推荐
- 有两个变量a 和 b,不用if、?: 、switch 或者其他判断语句,找出两个数中比较大的那个
- 选出两个数中较大者,不用if, ? : ,switch等判断语句.
- 有两个变量a和b,不用“if”、“? :”、“switch”或其他判断语句,找出两个数中比较大的
- 【面试题】不用if,条件表达式,switch等判断语句------找出两个数中较大的
- 有两个变量a 和 b,不用if、?: 、switch 或者其他判断语句,找出两个数中比较大的那个
- 不使用if、?:、switch及其他判断语句如何找出两个int型变量中的最大值和最小值
- 不用if,?:,等判断语句获得两数之中较大的或较小的数
- 有两个变量a和b,不用if等判断语句,求两者较大的值
- 两个变量a,b,不用“if”,“? :”,switch或者其它判断语句,找出两个数中间比较大的
- 关于不用if,switch,?:语句判断两个数大小及其他
- 关于不用if,switch,?:语句判断两个数大小及其他
- 今天学习时突然联想到这样一个有趣但无用的问题:利用C语言(不能是其他语言)求两个整数的较大/小值-----要求不用if、三目?、switch、循环、数组、加减乘除求余、位运算符以及任何库函数
- 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以及任何的比较语句
- 求1+2+...+n的前n项和,但不用乘除法、for、while、if、else、switch、case等关键字及条件判断语句
- 不使用 if switch 等 求出两个变量中的较大或(较小)的一个 11月13日
- 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以及任何的比较语句
- 不用if,.?,switch等判断语句,求两变量的大小
- PHP 不用求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- 两个整数型,不准用while、if、for、switch等判断语句 求出两者最大值
- 不用那if,switch,?:语句判断两个数的大小