marmot
发表于 2017-2-20 21:46:32
print("""一个回文数指的是从左向右和从右向左读都一样的数字。
最大的由两个两位数乘积构成的回文数是 9009 = 91 * 99。
找出最大的有由个三位数乘积构成的回文数。
---------------------------------------------------""")
# 反向取乘积,换成字符串,反向分片,若相等得解,加入列表,取max
list_huiwen = []#回文数列表
for x in range(999,100,-1):
for y in range(999, 100, -1):
num = str(x * y)
num_1 = num[::-1]
if num == num_1: #判定字符串相等
list_huiwen.append(int(num))
print("答案是: " + str(max(list_huiwen)))
余欲渔
发表于 2017-3-1 16:23:34
for i in range(999,100,-1):
for j in range(999,i,-1):
x=str(i*j)
if x[:]==x[::-1]:
print(i,j,i*j)
exit()
== RESTART: C:\Users\ASUS\AppData\Local\Programs\Python\Python35-32\test.py ==
924 962 888888
>>>
夜魔时生
发表于 2017-3-6 13:36:34
a=1
b=0
c=0
l=[]
for i in range(100,1000):
for j in range(100,1000):
a=i*j
b=list(str(a))
c=list(reversed(b))
if b==c:
l.append(a)
print(max(l))
testabc123
发表于 2017-3-9 16:48:10
#!/usr/bin/env python
#coding:utf-8
def Ss(m=100,n=100):
lis=[]
for a in list(range(10,m)):
for b in list(range(10,n)):
num=a*b
if str(num)[::]==str(num)[::-1]:
lis.append(num)
return max(lis)
if __name__ == '__main__':
smax=Ss(1000,1000)
print(smax)
99592938
发表于 2017-3-14 14:40:06
l=[]
for i in range(100,1000):
for j in range(i,1000):
s=str(i*j)
if s==s[::-1]:
l.append(i*j)
print(max(l))
99592938
发表于 2017-3-14 14:41:58
Liu_xy 发表于 2016-5-4 22:43
第三行 for j in range(100, 1000):
可以改成 for j in range(i,1000):
546397641
发表于 2017-3-21 17:03:07
list1=[]
for i in range(100,1000):
for j in range(100, 1000):
a = i*j
b=str(a)
c=b[::-1]
if a == int(c):
list1.append(a)
print(max(list1))
结果是:906609
JonTargaryen
发表于 2017-3-27 09:04:39
本帖最后由 JonTargaryen 于 2017-3-27 10:04 编辑
#include <stdio.h>
int palindrome_judge(long int);
int product_judge(long int);
int main(void)
{
long int result = 999 * 999;
int flag;
while(result > 10000)
{
result--;
flag = palindrome_judge(result);
if(flag)
{
if(product_judge(result))
{
break;
}
}
}
printf("%ld\n", result);
return 0;
}
int palindrome_judge(long int result)
{
char a;
for(int i = 0; i < 6; i++)
{
a = result % 10;
result /= 10;
}
if(a==a && a==a && a==a)
{
return 1;
}
{
return 0;
}
}
int product_judge(long int result)
{
int num1, num2;
for(num1 = 999; num1 > 99; num1--)
{
if(!(result % num1))
{
num2 = result / num1;
if(num2 > 100 && num2 < 999)
{
return 1;
}
}
}
return 0;
}
JonTargaryen
发表于 2017-3-27 10:25:40
JonTargaryen 发表于 2017-3-27 09:04
def palindrome_judge(result):
a = []
for each in range(6):
a.append(result % 10)
result //= 10
if a==a and a==a and a==a:
return 1
else:
return 0
def product_judge(result):
for num1 in range(999, 0, -1):
if not (result % num1):
if 99 < result // num1 <= 999:
return 1
return 0
def main():
result = 999 * 999
while result > 10000:
result -= 1
flag = palindrome_judge(result)
if flag:
if product_judge(result):
break
print(result)
if __name__ == '__main__':
main()
marmot
发表于 2017-3-29 23:54:39
marmot 发表于 2017-2-20 21:46
def is_palindrome(n):
return str(n) == str(n)[::-1]
output = filter(is_palindrome, )
print(max(list(output)))
filter升级版
凌晨分子
发表于 2017-4-4 23:56:15
结果:580085
代码:
def ishuiwen(s)://判断是否是回文数
return s == s[::-1]
[-1] //循环计算所有三位数间的乘积,将其中的回文数放入列表中,然后取最后一个元素,即最大的
凌晨分子
发表于 2017-4-5 00:08:03
凌晨分子 发表于 2017-4-4 23:56
结果:580085
代码:
有的问题,最后一个元素并不一定是最大的,所以修改一下:
sorted()[-1]//加个排序
最后最大回文数计算的是906609
Eagle.Tong
发表于 2017-4-16 02:35:53
本帖最后由 Eagle.Tong 于 2017-4-16 11:40 编辑
#找到有两个三位数相乘得到的最大回文数
flag = 0
lis = []
for i in list(range(500,1000))[::-1]:
for j in list(range(100,1000))[::-1]:
s = str(i*j)
inv_s = s[::-1]
if s == inv_s:
lis.append(int(s))
break
maxn = max(lis)
print('The largest palindrome product is %s'%(maxn))
结果:906609
天之南
发表于 2017-4-30 20:46:13
#include<stdio.h>
#include<math.h>
int main()
{
int i = 999 * 999 / 1000 - 1;//求前三位的最大值
int a = 0;//因数a
int b = 0;//因数b
int max = 0;
for (i; i > 0; i--)
{
max = i * 1000 + back_num(i);
for (a = (int)sqrt(max); max / a < 1000; a--)
{
if (max % a == 0)
{
b = max / a;
i = 0;
break;
}
}
}
printf("%d*%d=%d\n",a,b,max);
return 0;
}
int back_num(int x)//求后三位
{
int y = 0;
int i = 100;
while (x > 0) {
y = y + x % 10 * i;
x /= 10;
i /= 10;
}
return y;
}
铭记太阳
发表于 2017-5-4 14:36:38
答案是 993 x 913 = 906609
思路:主要研究如何节省计算时间,数值大于900000,即其中任意一个数不能小于900000/999=900,i从999到900,j从i递减,同时只要i x j<900000,跳出循环因为再小的j都没意义了,如此程序最大可能节省时间。
#include<stdio.h>
int main(void)
{
int i,j,Num,a=0,b=0,Rst=0;
for(i=999;i>=900;--i)
{
for(j=i;j>=900;--j)
{
Num=i*j;
if(Num<900000) break;
//剔除过小的数字节省计算量
if(Num-Num/10*10==9)
if((Num-Num/100*100)/10==(Num/10000-Num/100000*10))
if((Num-Num/1000*1000)/100==(Num/1000-Num/10000*10))
if(Num>Rst)
{
a=i; b=j; Rst=Num;
}
}
}
printf("%d x %d = %d\n",a,b,Rst);
return 0;
}
进击的小蜗牛
发表于 2017-5-18 10:57:58
本帖最后由 进击的小蜗牛 于 2017-5-18 11:01 编辑
# 用的python 3.6
num = 0
for i in range(100,1000):
for j in range(100,1000):
fi = i * j
to = int(str(fi)[::-1])
if fi == to and fi > num:
num = fi
u,p = i,j
print(num)
print(u,p)
运行结果,回文数906609
两个三位数913,993
格式化、
发表于 2017-6-7 15:25:35
public static void main(String[] args) {
// 4、一个回文数指的是从左向右读都一样的数字。最大的由
// 两个两位数乘积构成的回文数是9009=91*99。 找出最大的有由三位数乘积构成的回文数。
int i, j = 0, a = 0, b = 0, sum = 0;
for (i = 999; i > 100; i--) {
for (j = 999; j > 100; j--) {
if (cmp(i * j)) {
break;
}
}
if (sum < i * j) {
sum = i * j;
a = i;
b = j;
}
}
System.out.println(sum);
System.out.println(a);
System.out.println(b);
}
public static boolean cmp(int num) {
String str = num + "";
int ge = num % 10;
int shi = num % 100 / 10;
int bai = num % 1000 / 100;
String zz = "" + bai + shi + ge;
StringBuffer sss = new StringBuffer(zz);
String yy = sss.reverse().toString();
if (str.equals(yy + zz)) {
return true;
}
return false;
}
运维小书童
发表于 2017-8-4 14:43:05
#求最大的 由2个3位数相乘的结果为回文的乘积
import time
list = []
start = time.clock()
def isreversed(arg):
'转换成字符串判断是否回文'
if str(arg)[::-1] == str(arg):
return True
return False
#对于100-999的三位数x,优先判断x*999是否回文,否则乘数-1
#得到第一个回文则跳出循环 x+1 开始下一轮循环 结果添加到列表
#最后输出列表的最大值
for x in range(100,1000):
y = 999
while y > 100:
result = x * y
if isreversed(result):
list.append(result)
break
y -= 1
print(max(list))
end = time.clock()
print('耗时%f s'%(end - start))
麦特的灰
发表于 2017-9-2 08:59:52
max=0
maxi=0
maxj=0
for i in range(100,999):
for j in range(100,999):
num =i *j
a=num%10
b=num//10%10
c=num//100%10
d=num//1000%10
e=num//10000%10
f=num//100000%10
if (f==0):
if(a==e and b==d):
if (num>max):
max=num
maxi=i
maxj=j
else:
if(a==f and b==e and c==d):
if (num>max):
max=num
maxi=i
maxj=j
print("%d*%d=%d"%(maxi,maxj,max))
BngThea
发表于 2017-9-11 14:22:49
def check(num):
if num // 10**5 != (num % 10):
return False
elif num // 10**4 % 10 != num // 10 % 10:
return False
elif num // 10**3 % 10 != num // 100 % 10:
return False
else:
return True
flage = False
list0 = []
for i in range(999,100,-1):
for j in range(999,100,-1):
if check(i * j):
flage = True
break
if flage:
list0.extend()
idx = list0.index(max(list0))
print('{0} = {1} * {2}'.format(list0,list0,list0))