2014-01-23 28 views
1
import math 

thevalue = 0 

for x in range (100,999): 
    for y in range (100,999): 
     mynum=x*y 
     mynum_str=str(mynum) 

     for z in range(0,math.floor(len(mynum_str)/2)): 
      if mynum_str[0+z] != mynum_str[len(mynum_str)-1-z]: 
       break 
      else: 
       if (len(mynum_str)-1-z) -1 == z:    
        thevalue = mynum 

print(thevalue) 

給我580085這是不正確的答案(假設將超過90萬)...... 工作http://projecteuler.net/problem=4 ......上哪裏出了錯提示?程序生成迴文數

+2

可能重複的[歐拉問題號碼#4](http://stackoverflow.com/questions/555009/euler-problem-number-4) –

+2

如果你正在尋找兩個三位數字的*最大*迴文產品,爲什麼你開始在'100 * 100'?你不覺得你應該從'999 * 999'倒退嗎? – roippi

+0

好的電話,我會解決這個問題。 – Brian

回答

7

你不需要過於複雜的一個循環來檢查數的迴文性質:

# Using extended slice notation to reverse the string 
if str(n) == str(n)[::-1]: 
    print "Palindrome!" 

對於一個完整的解決方案,你的程序只是爲了尋找一個迴文數。有多個迴文數是3位數的乘積。你想要最大的那些。

(當然,這不是完整的解決方案 - 但它會是沒有樂趣,如果我們只是給你解決項目歐拉的挑戰;))

0

有檢查一個簡單的方法爲迴文。只需將您的字符串反轉並將其與原始值進行比較:if(mynum_str == mynum_str[::-1])

您得到580085的原因是您的程序僅打印出找到的最後一個值。 (有2470個可能的迴文。)嘗試要麼將它們存儲在列表和排序,或者只是保持最高版本:

import math 
import string 

maxpalindrome = 0 
for x in range (100,999): 
    for y in range (100,999): 
     mynum=x*y 
     mynum_str=str(mynum) 

     if(mynum_str == mynum_str[::-1]): 
      maxpalindrome = max(string.atoi(mynum_str), maxpalindrome) 

print(maxpalindrome)