简体   繁体   English

使用Python的Euler 17项目

[英]Project Euler 17 using Python

I'm currently solving Project Euler's problem number 17 using Python. 我目前正在使用Python解决Euler项目的问题编号17。 Here's the link for the problem statement: 这是问题陈述的链接:

http://projecteuler.net/problem=17 http://projecteuler.net/problem=17

Here's my solution in Python: 这是我在Python中的解决方案:

def no_to_words(n):
    num = str(n)
    s = ""
    hunds = n/100
    ten = n%100
    tens = ten/10
    units = ten%10
    if(len(num) == 3):
        if(n == 100):
            return "one hundred"

        if(hunds == 1):                        
            s = s + "one hundred and"
        elif(hunds == 2):
            s = s + "two hundred and"
        elif(hunds == 3):
            s = s + "three hundred and"
        elif(hunds == 4):
            s = s + "four hundred and"
        elif(hunds == 5):
            s = s + "five hundred and"
        elif(hunds == 6):
            s = s + "six hundred and"
        elif(hunds == 7):
            s = s + "seven hundred and"
        elif(hunds == 8):
            s = s + "eight hundred and"
        else:
            s = s + "nine hundred and"

        if(ten == 11):                         
            s = s + " eleven"
            return s
        elif(ten == 12):
            s = s + " twelve"
            return s
        elif(ten == 13):
            s = s + " thirteen"
            return s
        elif(ten == 14):
            s = s + " fourteen"
            return s
        elif(ten == 15):
            s = s + " fifteen"
            return s
        elif(ten == 16):
            s = s + " sixteen"
            return s
        elif(ten == 17):
            s = s + " seventeen"
            return s
        elif(ten == 18):
            s = s + " eighteen"
            return s
        elif(ten == 19):
            s = s + " nineteen"
            return s

        if(tens == 2):
            s = s + " twenty"
        elif(tens == 3):
            s = s + " thirty"
        elif(tens == 4):
            s = s + " forty"
        elif(tens == 5):
            s = s + " fifty"
        elif(tens == 6):
            s = s + " sixty"
        elif(tens == 7):
            s = s + " seventy"
        elif(tens == 8):
            s = s + " eighty"
        elif(tens == 9):
            s = s + " ninety"

        if(units == 1):                         
            s = s + " one"
        elif(units == 2):
            s = s + " two"
        elif(units == 3):
            s = s + " three"
        elif(units == 4):
            s = s + " four"
        elif(units == 5):
            s = s + " five"
        elif(units == 6):
            s = s + " six"
        elif(units == 7):
            s = s + " seven"
        elif(units == 8):
            s = s + " eight"
        elif(units == 9):
            s = s + " nine"

    if(len(num) == 2):
        if(n == 10):
            return "ten"
        if(ten == 11):                         
            s = s + "eleven"
            return s
        elif(ten == 12):
            s = s + "twelve"
            return s
        elif(ten == 13):
            s = s + "thirteen"
            return s
        elif(ten == 14):
            s = s + "fourteen"
            return s
        elif(ten == 15):
            s = s + "fifteen"
            return s
        elif(ten == 16):
            s = s + "sixteen"
            return s
        elif(ten == 17):
            s = s + "seventeen"
            return s
        elif(ten == 18):
            s = s + "eighteen"
            return s
        elif(ten == 19):
            s = s + "nineteen"
            return s


        if(tens == 2):
            s = s + "twenty"
        elif(tens == 3):
            s = s + "thirty"
        elif(tens == 4):
            s = s + "forty"
        elif(tens == 5):
            s = s + "fifty"
        elif(tens == 6):
            s = s + "sixty"
        elif(tens == 7):
            s = s + "seventy"
        elif(tens == 8):
            s = s + "eighty"
        elif(tens == 9):
            s = s + "ninety"

        if(units == 1):
            s = s + " one"
        elif(units == 2):
            s = s + " two"
        elif(units == 3):
            s = s + " three"
        elif(units == 4):
            s = s + " four"
        elif(units == 5):
            s = s + " five"
        elif(units == 6):
            s = s + " six"
        elif(units == 7):
            s = s + " seven"
        elif(units == 8):
            s = s + " eight"
        elif(units == 9):
            s = s + " nine"

    if(len(num) == 1):
        if(units == 1):
            s = "one"
        elif(units == 2):
            s = "two"
        elif(units == 3):
            s = "three"
        elif(units == 4):
            s = "four"
        elif(units == 5):
            s = "five"
        elif(units == 6):
            s = "six"
        elif(units == 7):
            s = "seven"
        elif(units == 8):
            s = "eight"
        elif(units == 9):
            s = "nine"

    if(len(num) == 4):
        return "one thousand"

    return s

final = ""
for e in range(1, 1001):
    s = no_to_words(e)
    final = final + s
ultimate = final.replace(" ", "")
print len(ultimate)

Now, the answer for this problem is (spoiler): 现在,这个问题的答案是(破坏者):

21124 21124

whereas, I'm getting 21121 as my answer. 而我的回答是21121。 What's wrong with my code? 我的代码有什么问题? I can't seem to figure out the problem. 我似乎无法找出问题所在。

You never covered the case where tens==1 . 您从未涉及过tens==1的情况。 And you don't consider exact multiples of 100. 而且您不考虑100的确切倍数。

It seems like you might be re-inventing the wheel a little bit here. 似乎您可能在这里重新发明了轮子。 Instead of using no_to_words I used the num2words library. 我没有使用no_to_words,而是使用了num2words库。 That seemed to give me the right answer. 那似乎给了我正确的答案。

total = 0
for num in range(1, 1001):
    total += len(num2words(num).replace(" ", "").replace("-", ""))

print(total)
21124

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM