Jump to content

 
a = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
consequences = []
multiplications = []
for i in range(987):
    consequences.append(int(str(a)[i:i+13]))
for t in consequences:
    b = 0
    c = 1
    for x in str(t):
        if b > 0:
            c *= int(x)
        b+=1
    multiplications.append(c)
print(sorted(multiplications))

I wrote this script but it returns wrong answer, I couln't debug furthermore, can you spot the problem?

 

Also, I just wanna thank all the members for making a good community, unlike stackoverflow.

Link to comment
https://linustechtips.com/topic/1275308-project-euler-8/
Share on other sites

Link to post
Share on other sites

As pointed out above, the 1000-digit number needs to be declared as a string, and you need to iterate over the string. This is a theme for the more difficult problems later on, where you will need to perform operations involving multiple large numbers that cannot be represented as an int.

 

A couple other problems with your code:

  • There's no need to sort. You just keep track of the largest product and print that out at the end.
  • You seem to be skipping the multiplication of first index of each substring by only multiplying when b > 0.
a = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
x = 0
for i in range(len(a) - 13):
    temp = 1
    for j in range(13):
        temp *= int(a[i + j]) 
    if temp > x:
        x = temp
print(x)
Link to comment
https://linustechtips.com/topic/1275308-project-euler-8/#findComment-14260110
Share on other sites

Link to post
Share on other sites

1 hour ago, Wictorian said:

I don't think it is wrıng. Because otherways wouldn't it get the square of the first index?

You can either set c = substring[0] and skip multiplication or set c = 1 and do the multiplication.

 

In your original code, you are setting c = 1 and skipping the first multiplication, which will lead to an incorrect answer.

Link to comment
https://linustechtips.com/topic/1275308-project-euler-8/#findComment-14260629
Share on other sites

Link to post
Share on other sites

10 hours ago, badreg said:

You can either set c = substring[0] and skip multiplication or set c = 1 and do the multiplication.

 

In your original code, you are setting c = 1 and skipping the first multiplication, which will lead to an incorrect answer.

Thanks, it worked. I guess I had forgetten I had implemented one of them while doing the other one.

Link to comment
https://linustechtips.com/topic/1275308-project-euler-8/#findComment-14261787
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×