C实现除法
C实现除法
来源
Leetcode上的一个题,做完后感觉很有意义,因而记录。
实际上自己也查阅了不少的实现除法的方式,最后还是感觉这个方法是最好的,没有别的原因,就是快。
需要注意的一些点
- 正整数之间相互操作会显得更加方便些,因此,我们需要考虑一些边界问题。比如int的范围是[-2e31,2e31-1],因此,如果-2e31转化为正数时,就超出了int的范围,最好的解决方式就是转化为long long int。
- 当然也可以转化为long int,这个取决于你的OS所定义的Long的范围。
- 变成相反数的时候,选择0-x会更加方便。
- ^异或符的使用也能帮助加快处理速度。
- 每个变量的type都需要斟酌过,因为很有可能会超过范围。
代码
int divide(int dividend, int divisor){
long long int y = (long long int)dividend;
long long int x = (long long int)divisor;
if(y < 0) y = 0 - y;
if(x < 0) x = 0 - x;
long long int tmp, one = 1, res = 0;
int restmp;
while(y >= x){
restmp = 0;
tmp = x;
while(y >= tmp){
tmp = tmp << 1;
restmp ++;
}
restmp --;
y -= (x << restmp);
res += (one << restmp);
}
if((dividend > 0)^(divisor > 0))
res = 0 - res;
if(res > 2147483647 || res < -2147483648)
res = 2147483647;
return res;
}
C实现除法的更多相关文章
- [LeetCode] Evaluate Division 求除法表达式的值
Equations are given in the format A / B = k, where A and B are variables represented as strings, and ...
- Java BigDecimal 转换,除法陷阱(转)
源地址: http://blog.csdn.net/niannian_315/article/details/24354251 今天在用BigDecimal“出现费解”现象,以前虽然知道要避免用, ...
- SQL 的坑1 除法“”不可用“”
今天工作中遇见 一问题,有5各部分,现要求5个部分各自的比例,SQL语句没有问题,后来还试了"加","减","乘","Round& ...
- Python学习---除法
python有两种除法,普通除法 a/b ,不论a,b精度 得到的都是浮点数. 4/2 = 2.0 3/5 = 0.6 floor除法,a//b , 得到一个舍弃小数位的整数结果,所以结果永远是 ...
- 【Python】一、除法问题及基本操作(逻辑与,if替代switch)及支持中文打印
1.查看版本 C:\Users\XXX>python -V Python 2.7.1 2.除法问题(不要整除) from __future__ import division tmp=0x3ec ...
- 除法取模练习(51nod 1119 & 1013 )
题目:1119 机器人走方格 V2 思路:求C(m+n-2,n-1) % 10^9 +7 (2<=m,n<= 1000000) 在求组合数时,一般都通过双重for循环c[i][ ...
- HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)
传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...
- 除法 Division
除法 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/A 题意: 输入正整数n按从小到大的顺序输出所有 ...
- c++20701除法(刘汝佳1、2册第七章,暴搜解决)
20701除法 难度级别: B: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 输入正整数n,按从小到大的顺序输出所有 ...
- js 除法 取整
js 除法 取整 1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.roun ...
随机推荐
- (转载)Universal Correspondence Network
转载自:Chris Choy's blog Universal Correspondence Network In this post, we will give a very high-level ...
- [LeetCode] 271. Encode and Decode Strings 加码解码字符串
Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...
- SQL查询无限层级结构的所有下级,所有上级(即所有的子孙曾孙等等)
表名:tb_menu 内容如下: 查询ID为3的所有无限层下级会员 WITH TAS( SELECT * FROM tb_menu WHERE id=3 UNION ALL SELECT a.* F ...
- 高级UI-Path和PathMeasure
Path是一个工具类,用来记录线条的轨迹路径,然后通过绘制轨迹路径,可以得到各种各样的图案,而PathMeasure是用来对Path进行测量的工具,再Path的运用中,运用最多的就是贝塞尔曲线,也是本 ...
- javascript实现每秒执行一次的方法
javascript实现每秒执行一次的方法 <pre> i=0; function showzhandou() { $('.zhandouresult p').eq(i).fadeIn() ...
- Python规范:用用assert
什么是assert assert的语法: assert_stmt ::= "assert" expression ["," expression] 例: ass ...
- Linux删除含有特殊符号文件名的文件
1. 文件名含有特殊字符,直接使用 rm 可能删除不了,可以使用如下方法: 1) 使用 ls -i 查处该文件的 inode 号,假设为123 2) 使用find命令删除: rm `find . ...
- linux查看进程与结束进程
查看所有进程 ps -ef ps -ef | grep 查找的进程名 结束进程 ps -ef | grep 查找的进程名 | grep -v grep | awk '{print $2}' | xar ...
- Ubuntu /etc/security/limits.conf 不生效问题
一.问题描述 修改 /etc/security/limits.conf ,重启之后不生效 内容如下: * soft nofile * hard nofile root soft nofile root ...
- Linux下Java变量
一.JAVA_HOME.PATH.CLASSPATH详解 1.1.JAVA_HOME 指向jdk安装目录,该目录下有bin.lib目录.Eclipse/NetBeans/Tomcat等软件就是通过搜索 ...