highest palindrome with 3 digit numbers in python

后端 未结 13 1204
梦如初夏
梦如初夏 2021-02-01 10:35

In problem 4 from http://projecteuler.net/ it says:

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-d

相关标签:
13条回答
  • 2021-02-01 11:26

    Tried making it more efficient, while keeping it legible:

    def is_palindrome(num):
        return str(num) == str(num)[::-1]
    
    def fn(n):
        max_palindrome = 1
        for x in range(n,1,-1):
            for y in range(n,x-1,-1):
                if is_palindrome(x*y) and x*y > max_palindrome:
                    max_palindrome = x*y
                elif x * y < max_palindrome:
                    break
        return max_palindrome
    
    print fn(999)
    
    0 讨论(0)
  • 2021-02-01 11:29

    Each time it doesnot have to start from 999 as it is already found earlier.Below is a simple method using string function to find largest palindrome using three digit number

    def palindrome(y):
        z=str(y)
        w=z[::-1]
        if (w==z):
            return 0
        elif (w!=z):
            return 1        
    h=[]
    a=999
    for i in range (999,0,-1):
        for j in range (a,0,-1):
        l=palindrome(i*j)
        if (l==0):
            h=h+[i*j]               
        a-=1
    print h
    max=h[0]
    
    for i in range(0,len(h)):
        if (h[i] > max):
        max= h[i]
    print "largest palindrome using multiple of three digit number=%d"%max  
    
    0 讨论(0)
  • 2021-02-01 11:30

    This would more efficiently be written as:

    from itertools import product
    
    def is_palindrome(num):
        return str(num) == str(num)[::-1]
    
    multiples = ( (a, b) for a, b in product(xrange(100,999), repeat=2) if is_palindrome(a*b) )
    print max(multiples, key=lambda (a,b): a*b)
    # (913, 993)
    

    You'll find itertools and generators very useful if you're doing Euler in Python.

    0 讨论(0)
  • 2021-02-01 11:30
    def div(n):
        for i in range(999,99,-1):
            if n%i == 0:
                x = n/i
                if x % 1 == 0:
                    x = n//i
                    if len(str(x)) == 3:
                        print(i)
                        return True
        return False
    
    
    def palindrome():
        ans = []
        for x in range(100*100,999*999+1):
            s = str(x)
            s = int (s[::-1])
            if x - s == 0:
                ans.append(x)
    
        for x in range(len(ans)):
            y = ans.pop()
            if div(y):
                return y
    
    
    print(palindrome())
    
    0 讨论(0)
  • 2021-02-01 11:30

    Here is the function I made in python to check if the product of 3 digit number is a palindrome

    Function:

    def is_palindrome(x):
        i = 0
        result = True
        while i < int(len(str(x))/2):
            j = i+1
            if str(x)[i] == str(x)[-(j)]:
                result = True
            else:
                result = False
                break
            i = i + 1
        return result
    

    Main:


    max_pal = 0
    for i in range (100,999):
        for j in range (100,999):
            x = i * j
            if (is_palindrome(x)):
                if x > max_pal:
                    max_pal = x
    
    print(max_pal)
    
    0 讨论(0)
  • 2021-02-01 11:31

    Not the most efficient answer but I do like that it's compact enough to fit on one line.

    print max(i*j for i in xrange(1,1000) for j in xrange(1,1000) if str(i*j) == str(i*j)[::-1])
    
    0 讨论(0)
提交回复
热议问题