美文网首页
欧拉计划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