美文网首页
欧拉计划8 (连续数字最大乘积)

欧拉计划8 (连续数字最大乘积)

作者: 请你吃薯片 | 来源:发表于2017-04-14 19:26 被阅读0次
    题目:
    在下面这个1000位正整数中,连续4个数字的最大乘积是 9 × 9 × 8 × 9 = 5832。

    73167176531330624919225119674426574742355349194934
    96983520312774506326239578318016984801869478851843
    85861560789112949495459501737958331952853208805511
    12540698747158523863050715693290963295227443043557
    66896648950445244523161731856403098711121722383113
    62229893423380308135336276614282806444486645238749
    30358907296290491560440772390713810515859307960866
    70172427121883998797908792274921901699720888093776
    65727333001053367881220235421809751254540594752243
    52584907711670556013604839586446706324415722155397
    53697817977846174064955149290862569321978468622482
    83972241375657056057490261407972968652414535100474
    82166370484403199890008895243450658541227588666881
    16427171479924442928230863465674813919123162824586
    17866458359124566529476545682848912883142607690042
    24219022671055626321111109370544217506941658960408
    07198403850962455444362981230987879927244284909188
    84580156166097919133875499200524063689912560717606
    05886116467109405077541002256983155200055935729725
    71636269561882670428252483600823257530420752963450

    找出这个1000位正整数中乘积最大的连续13个数字。它们的乘积是多少?

    Java:

    int step = 13;
    int i = 0;
    long msum = 0;
    String max = "";
    String s = "73167176531330624919225119674426574742355349194934" +
            "96983520312774506326239578318016984801869478851843" +
            "85861560789112949495459501737958331952853208805511" +
            "12540698747158523863050715693290963295227443043557" +
            "66896648950445244523161731856403098711121722383113" +
            "62229893423380308135336276614282806444486645238749" +
            "30358907296290491560440772390713810515859307960866" +
            "70172427121883998797908792274921901699720888093776" +
            "65727333001053367881220235421809751254540594752243" +
            "52584907711670556013604839586446706324415722155397" +
            "53697817977846174064955149290862569321978468622482" +
            "83972241375657056057490261407972968652414535100474" +
            "82166370484403199890008895243450658541227588666881" +
            "16427171479924442928230863465674813919123162824586" +
            "17866458359124566529476545682848912883142607690042" +
            "24219022671055626321111109370544217506941658960408" +
            "07198403850962455444362981230987879927244284909188" +
            "84580156166097919133875499200524063689912560717606" +
            "05886116467109405077541002256983155200055935729725" +
            "71636269561882670428252483600823257530420752963450";
    
    while (true) {
        if (i + step > s.length())
            break;
        String s1 = s.substring(i, i + step);
        int numlen = s1.length();
    
        long osum = 1;
        for (int j = 0; j < numlen; j++) {
            osum *= Long.parseLong(s1.substring(j, j + 1));
        }
        Log.e("s1==", s1);
        Log.e("s1*==", osum + "");
    
        if (osum > msum) {
            msum = osum;
            max = s1;
        }
        i += 1;
    }
    Log.e("log", "数字max==" + max + "   乘积msum==" + msum);
    

    python3:

    s = '''73167176531330624919225119674426574742355349194934\
    96983520312774506326239578318016984801869478851843\
    85861560789112949495459501737958331952853208805511\
    12540698747158523863050715693290963295227443043557\
    66896648950445244523161731856403098711121722383113\
    62229893423380308135336276614282806444486645238749\
    30358907296290491560440772390713810515859307960866\
    70172427121883998797908792274921901699720888093776\
    65727333001053367881220235421809751254540594752243\
    52584907711670556013604839586446706324415722155397\
    53697817977846174064955149290862569321978468622482\
    83972241375657056057490261407972968652414535100474\
    82166370484403199890008895243450658541227588666881\
    16427171479924442928230863465674813919123162824586\
    17866458359124566529476545682848912883142607690042\
    24219022671055626321111109370544217506941658960408\
    07198403850962455444362981230987879927244284909188\
    84580156166097919133875499200524063689912560717606\
    05886116467109405077541002256983155200055935729725\
    71636269561882670428252483600823257530420752963450'''
    
    i=0
    step=13
    max = 0
    msum = 0
    while(True):
        s1 = s[i:i+step]
        numlen = len(s1)
        if(numlen<step):
            break
        osum = 1
        for o in s1:
            osum*=int(o)
    
        if osum>msum:
            msum = osum
            max = s1
        i+=1
    
    print("数字max==",max,"   乘积msum==",msum)
    
    图片来自优美图

    真理属于人类,谬误属于时代。
    ——歌德

    相关文章

      网友评论

          本文标题:欧拉计划8 (连续数字最大乘积)

          本文链接:https://www.haomeiwen.com/subject/imbvottx.html