回文数是 9009 = 99 × 91。编写程序,求得任意输入的 n 位整数相乘形成的最大回文数。"/>
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 10n−1,从大到小枚举 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 i∗j<N, i ∗ j i*j i∗j不可能是最大回文数。根据这个思路进行编程,代码如下:
def Is_palindrome(s): #判断回文数l=len(s)for i in range((l-1)//2+1):if s[i]!=s[l-1-i]: return Falsereturn Truedef find(n):base=10**n-1 #因子的基准值(从10^n-1开始减小)for j in range(base,0,-1):if Is_palindrome(str(base*j)):max=base*jmini=j #因子可能的最小值(如果i或者j小于mini的话,i*j一定小于base*mini)breakfor 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*jreturn maxn=int(input())
print(find(n))
更多推荐
Python实现——两位整数相乘形成的最大回文数是 9009 = 99 × 91。编写程序,求得任意输入的 n 位整数相乘形成的最大回文数。
发布评论