Cの実装分割

Cの実装分割

ソース

Leetcode上の問題、非常に有意義な感じの後に行うので、記録します。

実際、彼は分裂を達成するための方法の多くにアクセスされ、最終的に私はこれが最善の方法であると感じ、ない他の理由のため、高速です。

注意すべき点がいくつかあり

  1. 正の整数間の相互運用性は、したがって、我々はいくつかの国境問題を考慮する必要があり、さらに便利になります。INTの範囲は[-2e31,2e31-1]、従って、陽性に-2e31場合、int型の範囲を超えているように、最善の解決策は、長いlong intに変換されます。
  2. もちろん、これは定義されたあなたのOSのロングレンジに依存し、long intに変換することができます。
  3. 数になるとは対照的に、選択0-xがより便利であろう。
  4. ^ XOR演算子の使用は、プロセスをスピードアップすることができます。
  5. 範囲を超えそうなので、それぞれの変数の型は、advisedly必要があります。

コード

    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;
    }

おすすめ

転載: www.cnblogs.com/wangha/p/11520896.html