Notes de brossage Leetcode (C++) - Mathématiques

Notes de brossage Leetcode (C++) - Mathématiques

Triez les idées en brossant les questions, résumez-les et partagez-les ici.
Adresse github : https://github.com/lvjian0706/Leetcode-solutions
Le projet github est nouvellement créé, et le code et les idées seront téléchargés les uns après les autres. Le code est basé sur C++ et python. Dans le même temps, l'algorithme de tri de base sera également trié et téléchargé.

7. Inversion d'entiers

Étant donné un entier signé 32 bits, vous devez inverser les chiffres sur chaque bit de l'entier.

Exemple 1 :
Entrée : 123
Sortie : 321
Exemple 2 :
Entrée : -123
Sortie : -321
Exemple 3 :
Entrée : 120
Sortie : 21
Remarque :
En supposant que notre environnement ne peut stocker que des entiers signés 32 bits, alors sa valeur La plage est [ −231, 231 − 1]. Selon cette hypothèse, si l'entier déborde après inversion, alors retourne 0.

class Solution {
    
    
public:
    /*
    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
    问题本身很简单,难点在判断溢出情况:
    1. 当前结果如果大于INT_MAX / 10,则下一步乘10后一定溢出;
    2. 当前结果如果等于INT_MAX / 10,则下一位如果大于7会溢出;
    3. 当前结果如果小于INT_MIN / 10,则下一步乘10后一定溢出;
    4. 当前结果如果等于INT_MIN / 10,则下一位如果小于-8会溢出;
    */
    int reverse(int x) {
    
    
        int ans = 0;
        while(x){
    
    
            if(ans > INT_MAX / 10){
    
    
                ans = 0;
                break;
            }
            else if(ans == INT_MAX / 10 && (x % 10)>7){
    
    
                ans = 0;
                break;
            }
            else if(ans < INT_MIN / 10){
    
    
                ans = 0;
                break;
            }
            else if(ans == INT_MIN / 10 && (x % 10)<-8){
    
    
                ans = 0;
                break;
            }
            else{
    
    
                ans = ans * 10 + (x % 10);
                x /= 10;
            }
        }
        return ans;
    }
};

おすすめ

転載: blog.csdn.net/weixin_43273742/article/details/107741407