除法计算-C++-非*,/,%运算

原理: m = x1*2^y1 + x2*2^y2……

要点:    << >>优先级比+,-低。

顺便插一下优先级图片:

只考虑正数情况下:

int divide(int x,int y)
{
    if(x < y)
        return 0;
    int sum = 0;
    int te = y<<1;
    while(x > te)
    {
        sum++;
        te = te<<1;
    }
    int v = y<<sum;
    return divide(x - v,y) + (1<<sum);
}
时间: 2024-10-13 16:18:30

除法计算-C++-非*,/,%运算的相关文章

C语言负数的除法和求余运算

假定我们让 a 除以 b,商为 q,余数为 r: q = a / b; r = a % b; 这里,不妨假定 b 大于 0. 我们希望 a.b.q.r 之间维持怎样的关系呢? 1.最重的一点,我们希望 q * b + r == a,因为这是定义余数的关系. 2.如果我们改变 a 的正负号,我们希望这会改变 q 的符号,但这不会改变 q  的绝对值. 3.当 b>0 时,我们希望保证 r >= 0 且 r < b.例如,如果余数用于哈希表的索引,确保 它是一个有效的索引值很重 . 这三条性

警惕C++中整数除法计算的精度损失

很偶然发现了一个精度损失的问题,简单来说: 有表达式: l = i/30 + j/40 + k/25, 求当{i,j,k} = {50,85,27}时l的值,很简单,用计算器马上可以算出答案为4.8717,但是编写了以下程序来实现: int i = 50,j = 85, k = 27; double l = i/30 + j/40 + k/25; 运行后,结果显示4.000000000! 为什么?这是因为在C++中两个整数相处得到的结果还是整数,故除法都被四舍五入了再相加,就得到结果4.0000

Divide two numbers,两数相除求商,不能用乘法,除法,取模运算

问题描述:求商,不能用乘法,除法,取模运算. 算法思路:不能用除法,那只能用减法,但是用减法,超时.可以用位移运算,每次除数左移,相当于2倍. 1 public class DividTwoIntegers { 2 public int divide(int dividend, int divisor) 3 { 4 if(divisor == 0) return Integer.MAX_VALUE; 5 if(divisor == -1 && dividend == Integer.MIN

位运算计算与位运算应用

位运算包括与,或,取反,异或,左移,右移等. 一 位运算计算 1 与运算:& 操作符&将2个数的二进制位进行与操作,2个数对应的位都为1,运算结果为1:否则运算结果为0. 比如 6&8,6的二进制为:0110   8的二进制为:1000.所以6&8 = 0000 = 0 2 或运算:| 操作符|将2个数的二进制位进行或操作,2个数对应的位有一个为1,运算结果为1:否则运算结果为0. 比如 6&8,6的二进制为:0110   8的二进制为:1000.所以6&8

C/C++ 移位计算代替乘除运算

测试移位和乘除的比较,发现移位比乘除运算快一个位数的速度,但是难点在于判断是否是2的幂次级的数,如果不是还得通过代码拆分到2的幂次+上分子的累和,然后通过移位得到2的次幂数这样; 下列代码只是简单的判断是幂级数则移位运算,不是则正常计算,不是完全都是移位算,(之后如果找到方法判断更快在更新) C/C++: 1 #include <iostream> 2 3 4 5 uint64_t Multiply_Dived(uint64_t member, uint64_t denominator, ch

数论专题---除法表达式之高精度运算,扩展欧几里得算法

[题意描述] 给定这样一个表达式:X1/X2/X3/·····/Xk,其中Xi是正整数.除法表达式应到按照从左到右的顺序求和.但在表达式中嵌入括号可以改变计算顺序.输入表达式,判断是否可以通过加括号使得表达式最后的值为整数. [分析] 表达式可以写成E=(X1·X3·····Xk)/X2:(X1一定在分子位置,X2一定在分母位置,其它任意) 问题变为E是否为整数. 对于大数相乘,我们可以采用两种方法避免数据溢出: 1.采用素数的唯一分解定理:存储可能存在素数的个数(如何存储,用一个数组就行) 2

C语言写的秒速计算四则混合运算项目

开发语言:C语言 开发工具:Visual Studio 2017 整理时间:2017年8月2日 源代码:500行: 开发方式:C语言多文件模式开发 实现功能:在文件中写入四则混合运算表达式(无论有多长...),按运行即可得出结果. 四则混合运算表达式形如: (19+67)*33-45/5+17*52+39/3+.... 意义:在实际快速计算的同时,对学习也有如下意义:对堆栈的学习应用,多多文件的学习巩固 项目演示截图: 其他C语言项目参考:

与或非运算(布尔值/非布尔值)

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script type="text/javascript"> 7 /* 8 逻辑运算符 9 1.!非 10 对于非布尔值,会将其转换为布尔值,再操作 11 所以我们可以利用该特点,将一个其他数据类型转换为布尔值 12 原理

Sass预编译 减法及除法计算问题

众所周知,Sass(Scss)预编译代码比CSS代码好的一点地方就是,支持运算!但是在平时使用四则运算时,要注意的坑一定要注意. 减法:Sass代码的减法运算符 和 符号 “-” 是一样的,所以在写作时要特别注意间距,例如  此段代码在编译时会报错, 首次接触Sass的同学看到可能会一头雾水,检查代码也检查不出什么错误,其实这就是因为  $widthnum1-$widthnum2  之间的减法符号被识别成 符号“-”,在减法符号前后都加上空格 就好了 除法:Sass中的除法其实只需要注意一点,就