zoukankan      html  css  js  c++  java
  • 【0031】反转整数/判断回文


    Reverse Integer

    反转一个整数
     
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    class Solution
    {
    public:
        int reverse(int x)
        {
            /*一位数的情况*/
            if(-10 < x && x < 10)
            {
                return x;
            }

            /*记录负数情况,负数转换成正数处理*/
            bool ispositive = true;
            if(x < 0)
            {
                ispositive = false;
                x = -x;
            }

            long result = 0;
            while(x)
            {
                result = result * 10 + x % 10;
                x /= 10;
            }
            if(!ispositive)
            {
                result = -result;
            }
            return result;
        }
    };

    Palindrome Number

    判断回文
    首先想到,可以利用上一题,将整数反转,然后与原来的整数比较,是否相等,相等则为
    Palindrome 的。可是 reverse() 会溢出。
    正确的解法是,不断地取第一位和最后一位(10 进制下)进行比较,相等则取第二位和倒数第
    二位,直到完成比较或者中途找到了不一致的位。
     
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    class Solution
    {
    public:
        /*每次算出对div的商,和对10的余数做比较
         *迭代的过程当中更新div
         */

        bool isPalindrome(int x)
        {
            if(x < 0)
            {
                return false;
            }
            int div = 1;
            while(x / div >= 10)
            {
                div *= 10;
            }

            while(x > 0)
            {
                /*商*/
                int quotient = x / div;
                /*余数*/
                int remainder = x % 10;
                if(quotient != remainder)
                {
                    return false;
                }
                /*把当前的开头位置去掉*/
                x = x % div;
                if(x > 0 && x < 10)
                {
                    return true;
                }
                /*把当前的结尾位置去掉*/
                x /= 10;
                /*更新新的div除数-去掉了两位应该除以100*/
                div /= 100;
            }
            return true;
        }
    };
     
     
     
     
  • 相关阅读:
    [转]为什么阿里巴巴要禁用Executors创建线程池?
    支付宝的架构到底有多牛逼!
    [转] Java Agent使用详解
    Spring Boot必备技能之Starter自定义
    面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
    Docker 容器化应用
    Python Click 学习笔记
    MySQL优化(7):其他注意事项
    MySQL优化(6):分表和读写分离
    MySQL优化(5):分区
  • 原文地址:https://www.cnblogs.com/codemylife/p/3785622.html
Copyright © 2011-2022 走看看