项目欧拉8

时间:2014-01-10 07:38:35

标签: java math

我已经阅读了关于项目Euler问题8的一些主题。但是我不知道为什么我的代码给了我错误的答案。

package main;

import java.util.ArrayList;

public class Euler8 {

public static void main(String[] args) {
    String bigNumber = "73167176531330624919225119674426574742355349194934"
            + "96983520312774506326239578318016984801869478851843"
            + "85861560789112949495459501737958331952853208805511"
            + "12540698747158523863050715693290963295227443043557"
            + "66896648950445244523161731856403098711121722383113"
            + "62229893423380308135336276614282806444486645238749"
            + "30358907296290491560440772390713810515859307960866"
            + "70172427121883998797908792274921901699720888093776"
            + "65727333001053367881220235421809751254540594752243"
            + "52584907711670556013604839586446706324415722155397"
            + "53697817977846174064955149290862569321978468622482"
            + "83972241375657056057490261407972968652414535100474"
            + "82166370484403199890008895243450658541227588666881"
            + "16427171479924442928230863465674813919123162824586"
            + "17866458359124566529476545682848912883142607690042"
            + "24219022671055626321111109370544217506941658960408"
            + "07198403850962455444362981230987879927244284909188"
            + "84580156166097919133875499200524063689912560717606"
            + "05886116467109405077541002256983155200055935729725"
            + "71636269561882670428252483600823257530420752963450"
            ;
    ArrayList<Integer> myArray = new ArrayList<Integer>();
    int counter = 1;
    int current = 0;
    int product = 1;
    int maximumProduct = 0;
    for(int i = 0; i < bigNumber.length(); i++)  {
        String b = "" + bigNumber.charAt(i);
        current = Integer.parseInt(b);
        myArray.add(current);
        if(counter % 5 == 0) {

            for(int x : myArray) {
                product = x * product;
            }
            if(product > maximumProduct) {
                maximumProduct = product;
            }
            myArray.clear();
            product = 1;
        }
        counter++;
    }
    System.out.println(maximumProduct);
    }
}

我得到的答案是31752,右边的是40824.由于这是作业,我无法将解决方案复制到问题所以我想解释为什么我的代码不能正常工作所以我可以解决它。

感谢。

1 个答案:

答案 0 :(得分:1)

你没有考虑正确的元素来增加。每个产品通过乘以5个连续数字获得,对于每个数字,下面的代码将这些数字保存在myArray

public static void main(String[] args) {            
   String bigNumber = "73167176531330624919225119674426574742355349194934"
                + "96983520312774506326239578318016984801869478851843"
                + "85861560789112949495459501737958331952853208805511"
                + "12540698747158523863050715693290963295227443043557"
                + "66896648950445244523161731856403098711121722383113"
                + "62229893423380308135336276614282806444486645238749"
                + "30358907296290491560440772390713810515859307960866"
                + "70172427121883998797908792274921901699720888093776"
                + "65727333001053367881220235421809751254540594752243"
                + "52584907711670556013604839586446706324415722155397"
                + "53697817977846174064955149290862569321978468622482"
                + "83972241375657056057490261407972968652414535100474"
                + "82166370484403199890008895243450658541227588666881"
                + "16427171479924442928230863465674813919123162824586"
                + "17866458359124566529476545682848912883142607690042"
                + "24219022671055626321111109370544217506941658960408"
                + "07198403850962455444362981230987879927244284909188"
                + "84580156166097919133875499200524063689912560717606"
                + "05886116467109405077541002256983155200055935729725"
                + "71636269561882670428252483600823257530420752963450"
                ;

                ;
        ArrayList<Integer> myArray = new ArrayList<Integer>();
        int counter = 1;
        int current = 0;
        int product = 1;
        int maximumProduct = 0;
        for(int i = 0; i < bigNumber.length(); i++)  {
            String b = "" + bigNumber.charAt(i);
            current = Integer.parseInt(b);
            myArray.add(current);
            counter++;
            if(counter == 5) {
                for(int x : myArray) {
                    product = x * product;
                }
                if(product > maximumProduct) {
                    maximumProduct = product;

                }
               myArray.remove(0);
               product = 1;
            }
            counter=myArray.size();
        }
        System.out.println(maximumProduct);
        }
}

另见Greatest product of five consecutive digits in a 1000-digit number