判断数字是否是回文数 求最大公约数

回文数:

方法一:

负数直接返回,整数直接求逆转之后的数(可能会溢出)

public boolean isPalindrome(int x) {
        int num=x;
        int sum=0;
        while(x>0){
            sum=sum*10+num%10;
            num/=10;
        }
        return x==sum;
    }

方法二:

        求逆转一半的数,然后和未逆转的做比较。

        逆转之后 res的位数可能和现在的x的的位数相等,也可能是现在的x的位数加1
                位数相等:如果x=res 回文数 在这种情况下 x>res/10
                位数不等:如果x=res/10 回文数  在这种情况下,x<res

        我没有想到最后一位为零的数都不是回文数。

 public boolean isPalindrome1(int x){
        //如果是个负数,那么一定不是回文数
        //如果该数的最后一位是0,那么就一定不是回文数(0除外)
        if(x<0||(x%10==0&&x==0)) return false;
        int res=0;
        //如果我们只逆转x的一半的位数或者一半+1的位数,那么就一定不会溢出
        while(res<x){
            res=res*10+x%10;
            x/=10;
        }
        //逆转之后 res的位数可能和现在的x的的位数相等,也可能是现在的x的位数加1
        //  位数相等:如果x=res 回文数 在这种情况下 x>res/10
        //  位数不等:如果x=res/10 回文数  在这种情况下,x<res
        //因此可以写成一个
        return x==res||x==res/10;
    }

 求最大公约数: 

               假设x,y(x>y)的最大公约数的最大公约数为为k,那么x-y也是k的倍数。

 public static int get(int x,int y){
        if(x%y==0) return y;
        return get(Math.max(x-y,y),Math.min(x-y,y));
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值