用java实现10000以内的回文数字

实现回文数字:

eg: 111 121 131 141 151 161

1111 1221 1331 1441 1551 1661 1771 1881

 


/**
 * 功能描述:打印10000以内的回文数字
 *
 * @author:陈丽强
 * @Date:2020/4/30 16:12
 */
@Slf4j
public class Test {
   

        public static void main(String[] args) {
            for(int i=10;i<10000;i++){				//10以内的正整数不是回文数,所以从10开始
                if(isCircleNumber2(i)){				//判断是否为回文数字
                    System.out.print(i+" ");		//打印回文数字
                }
            }
        }


        /**
         * 效率高,直接用int型进行比较
         * @param num
         * @return
         */
        private static boolean isCircleNumber(int num) {
            int oldNum = num;					//原值
            int temp = 0;						//反值
            while(num > 0){						//循环 num 的每一位数值
                temp = temp * 10 + num % 10;	//得到一位数字
                num /= 10;						//num减少一位
            }
            return temp == oldNum;				//判断反值与原值是否相等
        }


        /**
         * 效率低,通过StringBuilder的reverse()方法反转数字,与原值比较是否相等。
         * @param num
         * @return
         */
        private static boolean isCircleNumber2(int num){
            String oldNum = String.valueOf(num);			//原值
            StringBuilder sb = new StringBuilder(oldNum);	//创建StringBuilder对象
            sb.reverse();									//反转
            String newNum = sb.toString();					//反转后的数字(字符串)
            return oldNum.equals(newNum);					//比较两个字符串值是否相等
        }

        private static boolean isCircleNumber3(int num){
            String oldNum = String.valueOf(num);
            StringBuffer newEndStr = new StringBuffer(); //重组后的后半部分

            String beforeStr = "";
            String endStr = ""; //后半部分


            if(oldNum.length() % 2 == 0){  //原值字符长度  偶数
                endStr = oldNum.substring(oldNum.length()/2);
                beforeStr = oldNum.substring(0,oldNum.length()/2);
            }else{ //奇数
                endStr = oldNum.substring(((oldNum.length()+1)/2));
                beforeStr = oldNum.substring(0,((oldNum.length()-1)/2));
            }

            char[] oldStr = endStr.toCharArray(); //后半部分数字
            for(int i = oldStr.length;i>0;i--){
                newEndStr.append(oldStr[i-1]);
            }

            //重组后 判断前半部分雨后半部分是否相等
            return beforeStr.equals(newEndStr.toString());
        }


}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值