首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >479. 最大回文数乘积

479. 最大回文数乘积

作者头像
编程张无忌
发布2021-06-01 21:34:32
发布2021-06-01 21:34:32
7810
举报
文章被收录于专栏:悟道悟道

你需要找到由两个 n 位数的乘积组成的最大回文数。 由于结果会很大,你只需返回最大回文数 mod 1337得到的结果。 示例: 输入: 2 输出: 987 解释: 99 x 91 = 9009, 9009 % 1337 = 987 说明: n 的取值范围为 [1,8]。

代码语言:javascript
复制
class Solution {
    public int largestPalindrome(int n) {
        /**
        n位数乘n位数最大应该是2*n位数
         那么就构建一个回文数(通过前两位进行构建),然后判断他是否能由两个n位数相乘得来
         */

         long max=(long)(Math.pow(10,n)-1); //当前位数,能取到的最大值
         long min=(long)(Math.pow(10,n-1));//当前位数,能取到的最小值
         long cur=(long)(max*max/Math.pow(10,n));  //当前数从max开始,不断-- 最小是min

         if(n==1){
             return 9;
         }
        
            while(cur>=min){
                   long target=create(cur);
               for(long i=max;i>=min;i--){
                
                   if(i*i<target){//一定要有,否则比99*99大的数产生 比如9889 这种情况发生
                       break;
                   }
                   
                  
                   if(target%i==0){
                       //说明可以由两位数想乘而得
                       
                       return (int)(target%1337);
                   }
               }
                //没找到, cur--  99->98->97
                cur--;
            }
         
            return -1;

    }
    //根据当前数,生成回文串
    public long create(long n){
        
        StringBuilder sb=new StringBuilder(String.valueOf(n));
        String str1=sb.toString();
        String str2=sb.reverse().toString();
        return Long.parseLong(str1+str2);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档