不用if比较两个数大小
方法1:取平均值法
大的为 ((a+b)+abs(a-b)) / 2
小的为 (a+b - abs(a-b)) / 2
int fMax1(int a, int b)
{ return ((a+b)+abs(a-b)) / 2;
}
方法2:取平均值法(不使用abs() )
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 fMax2(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;
}
方法3:使用三目条件运算符
如果取 a/b 余数不为0,则说明a>b 这是个好方法,不过题目说了,不能用“? :”
int fMax3(int a, int b)
{ return (a / b) ? a : b;
}
方法4:移位法
当b<0的时候以补码存,故最高位是1 。负数补码符号位是1,正数补码符号位是0。所以右移31位b>>31其实就是最高位的值 。
b>=0时候最高位为0 ,所以b跟1与时候为b,a=a-(a-b)=b ,b跟1作与运算时候为0,相当于a=a-0=a。
int fMax4(int a, int b)
{ b = a - b; a -= b & (b>>31); return a;
} int fMax5(int a,int b)
{ int c[2] = {a, b}; int z = a - b; z = (z>>31)&1; return c[z];
} int fMax6(int a, int b)
{ int flag = ((a - b) >> 31)&1; return a - (a - b) * flag;
}
方法五:数组下标法
int fMax7(int a, int b)
{ int pair[2] = {a, b}; return pair[a < b];
}
不用if比较两个数大小相关推荐
- 编写一个函数,实现计算两个数大小的比较,且返回最大值。
例子:编写一个函数,实现计算两个数大小的比较,且返回最大值. 解释:当$a大于$b,返回最大值$a,当$b大于$b,返回最大值$b,否则输出null 实现效果: ...
- 不用中间变量交换两个数的值
交换两个数的值是一件非常简单的任务,如果交换a与b,我们一般这样做: tmp = a; a = b; b = tmp; 如果不用中间变量tmp,有以下两种方法: 方法1: a=a+b; b=a-b; ...
- 微信小程序比较两个数大小
微信小程序,输入两个数比较大小 效果图 wxml代码 <!--index.wxml--> <view class="demo-box"><text c ...
- Java基础编程题目——定义一个比较两个数大小的方法
编写一个方法判断两个数的大小,并返回较大的值 import java.util.Scanner;public class Max {public static void main(String[] a ...
- HTML数字比较大小游戏,Javascript 比较两个数大小并输出最大数
题目:在页面中添加两个单行文本框,在两个文本框中输入两个数字,使用JavaScript函数比较这两个函数大小,并使用对话框输出最大数. 实现代码如下: function maxNum() { //获取 ...
- 汇编比较两个数大小_计算机是怎样跑起来的 -- 体验一次汇编过程
标志内存或I/O中存储单元的数字叫做"地址". CPU中的标志寄存器有什么作用? 用于在运算指令执行后,存储运算结果的某些状态. 从程序员的角度看硬件 CPU:种类,时钟信号的频率 ...
- 用switch排两个数大小C语言,关于C语言Switch语句,先学这些技巧够不够?
一.C语言中switch的用法 1.switch后面括弧内的[表达式],ANSI标准允许它为任何类型: 2.当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,否则,就 ...
- matlab问题利用M文件比较两个数大小,Matlab中写M文件及调用
1题.自然数n的阶乘 function y=lilu_fact(n) n=floor(n);%如果是小数,向下取整至整数 y=1; if n>1 %这里负数,0的阶乘都将得到1 for i=1 ...
- C语言——比较两个数大小的两种写法
1.普通写法 #include<stdio.h> int main() {int num1=10;int num2=20;if(num1>num2)printf("较大值是 ...
- 编程题:两个数比较大小,之后用变量t互换。
编程题:两个数比较大小,之后用变量t互换. #include<stdio.h> void main() { float x,y,t; scanf("%f,%f",&am ...
最新文章
- 无线路由器与无线AP的区别
- Net设计模式实例之桥接模式( Bridge Pattern)(2)
- android 自定义view 动画效果,Android自定义view----音乐播放动画
- Linux添加用户(user)到用户组(group)
- win8看不到win7局域网计算机名,实现Win7旗舰版与win8.1系统局域网里文件共享的设置方法【图】...
- vue.js页面刷新出现闪烁问题的解决
- oracle rac 启动失败has,oracle11.2.0.4 rac asm启动故障
- Ubuntu chmod 命令
- codeigniter中base_url和site_url
- 【Linux学习】Vim 怎么设置显示行号以及永久性显示行号
- markdown 删除线
- 学习Python的三种境界,你现在是在什么境界?
- BMS-Pro电池巡检综合监控系统
- Spring中的AOP以及切入点表达式和各种通知
- “团队奖金包”让年终奖更公平
- 一款运动类APP开发需要哪些功能
- 【Git技巧】第三篇 删除冗余的本地或远程的操作分支
- 网络七层模型和四层模型的区别
- 文顶顶虽老,博客尚在
- Linux九阴真经之九阴白骨爪残卷12(日志功能)
热门文章
- PDF怎么编辑,如何给PDF添加书签
- 汇编移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR
- mysql phpmyadmin远程_phpMyAdmin远程连接mysql数据库
- MSVC创建的Qt工程图标设置
- [状压DP]帮助Bubu
- 正则表达式之提取数字
- 传16寸MacBook Pro九月发布 分辨率3072x1920
- 腾讯统一播放器 API 文档2.0
- 设置路由器虚拟服务器拦截广告,路由器怎么安装防火墙?拦截病毒广告就这么简...
- C# 将raw格式的二进制灰度图像转为正常位图格式