c_cpp 除以两个整数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 除以两个整数相关的知识,希望对你有一定的参考价值。

// solution 1, better. 
// 思想,先去掉符号,最后再考虑符号。一定要找到一个k, 使 b << k 一定是大于a的,之后再k--
int divide_two_integers(int up, int down) {
    long long a = abs((long long)up);
    long long b = abs((long long)down);
    
    long long result = 0;
    while(a >= b) {
        int k = 0;
        while(a >= (b << k) ) k++;  // gist, should be >= not >
        k--;
        a -= b << k;
        result += 1 << k;
    }
    return ((up^down)>>31) ? -result : result;
}

// solution 2
int divide_two_integers2(int up, int down) {
    long long a = abs((long long)up);
    long long b = abs((long long)down);
    long long result = 0;
    while(a >= b) {
        int k = 0;
        while(a >= (b << k)) {
            result += 1 << k;
            a -= b << k;
            k++;
        }
    }
    return ((up^down)>>31) ? -result : result; 
}

以上是关于c_cpp 除以两个整数的主要内容,如果未能解决你的问题,请参考以下文章

java 29.除以两个整数(#)。java

java 29.除以两个整数(#)。java

java 29.除以两个整数(#)。java

java 29.除以两个整数(#)。java

java 29.除以两个整数(#)。java

将两个整数的乘积除以它们的 gcd 的结果不正确