-3

I have spent a couple of hours struggling with this problem and I just can't figure out why it doesn't work. Basically, the question is to find the thirteen consecutive digits that have the greatest sum. If I modify it to look for four digits or five digits, it gets the correct answer, but when it looks for thirteen I get 2091059712, which is not correct. I am pretty new to coding, and am completely at a loss for what could be wrong.

// this is the 1000 digit number
String big = "73167176531330624919225119674426574742355349194934" +
        "96983520312774506326239578318016984801869478851843"+
        "85861560789112949495459501737958331952853208805511"+
        "12540698747158523863050715693290963295227443043557"+
        "66896648950445244523161731856403098711121722383113"+
        "62229893423380308135336276614282806444486645238749"+
        "30358907296290491560440772390713810515859307960866"+
        "70172427121883998797908792274921901699720888093776"+
        "65727333001053367881220235421809751254540594752243"+
        "52584907711670556013604839586446706324415722155397"+
        "53697817977846174064955149290862569321978468622482"+
        "83972241375657056057490261407972968652414535100474"+
        "82166370484403199890008895243450658541227588666881"+
        "16427171479924442928230863465674813919123162824586"+
        "17866458359124566529476545682848912883142607690042"+
        "24219022671055626321111109370544217506941658960408"+
        "07198403850962455444362981230987879927244284909188"+
        "84580156166097919133875499200524063689912560717606"+
        "05886116467109405077541002256983155200055935729725"+
        "71636269561882670428252483600823257530420752963450";
ArrayList<Integer> nums = new ArrayList<Integer>();
int counter = 0;
    for (counter = 0; counter<988; counter++) {
        String str = big.substring (counter,counter+13);
// creates a substring thirteen digits long
        Integer product = 1;
        for (int o=0; o<13; o++) {
            String num = Character.toString(str.charAt(o));
            Integer numb = Integer.parseInt(num);
// Turns each digit into an integer and then multiplies them together
            product = product*numb;
        }
            nums.add(product);
        }
//finds biggest number
int bignum = 0;
for (Integer num : nums) {
    if (num > bignum) {
        bignum = num;
    }
}

Any help would be greatly appreciated. Thanks.

  • Looks like you're running into an overflow error! [How does Java handle integer underflows and overflows and how would you check for it?](http://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflows-and-overflows-and-how-would-you-check-fo). An integer with 13 digits will be a trillion, which is far bigger than the largest value for integer (~2 billion). – Obicere Jan 22 '17 at 01:38
  • @Obicere he never attempts to store an integer with 13 digits. – EyedJellyfish Jan 22 '17 at 01:42
  • @EyedJellyfish No, but he does try to store an 11 digit integer. –  Jan 22 '17 at 01:49
  • @Andrevin fair enough, but OP's whole approach seems very strange, which is the main issue here. He's trying to find the 13 consecutive integers with the largest sum, but he finds the product instead. – EyedJellyfish Jan 22 '17 at 01:52
  • @EyedJellyfish Is there something other than his excessive variables and not keeping his max as he goes through it that I'm missing, or is that the strange part? Project Euler #8 actually says product, his title is just wrong. –  Jan 22 '17 at 01:55
  • @Andrevin oh, well he says "sum", so his description of the problem is wrong. – EyedJellyfish Jan 22 '17 at 02:06

2 Answers2

0

Change all your Integers to Longs, your only problem is integer storage.

0

You need to change your numb and bignum to Longs instead of Ints, if that donsen't work then you can change them to BigIntegers.

Ali Camilletti
  • 116
  • 1
  • 3
  • 11