Python实现——两位整数相乘形成的最大回文数是 9009 = 99 × 91。编写程序,求得任意输入的 n 位整数相乘形成的最大回文数。

题目内容:
两位整数相乘形成的最大回文数是 9009 = 99 × 91。编写程序,求得任意输入的 n 位整数相乘形成的最大回文数。

输入格式:
正整数 n

输出格式:
n 位整数相乘形成的最大回文数

输入样例:
2

输出样例:
9009

【基本思路】从大到小枚举可能的n位数因子,从中找到最大的回文数乘积。
【优化】试图缩小因子的取值范围,减少循环次数。
【分析】设两个因子分别为 i i i j j j,取 i i i等于因子可能的最大值 1 0 n − 1 10^n-1 10n1,从大到小枚举 j j j,一定可以找到回文数 N N N,设此时 j = j 0 j=j_0 j=j0。则 i > j 0 i>j_0 i>j0 j > = j 0 j>=j_0 j>=j0,否则 i ∗ j < N i*j<N ij<N i ∗ j i*j ij不可能是最大回文数。根据这个思路进行编程,代码如下:

def Is_palindrome(s):    #判断回文数
    l=len(s)
    for i in range((l-1)//2+1):
        if s[i]!=s[l-1-i]: return False
    return True

def find(n):
    base=10**n-1   #因子的基准值(从10^n-1开始减小)
    for j in range(base,0,-1):
        if Is_palindrome(str(base*j)):
            max=base*j
            mini=j    #因子可能的最小值(如果i或者j小于mini的话,i*j一定小于base*mini)
            break
    for i in range(base,mini,-1):
        for j in range(i,mini,-1):
            if Is_palindrome(str(i*j)):
                if i*j>max: max=i*j
    return max

n=int(input())
print(find(n))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值