Project Euler #8

Saurabh Rana

I tried to solve the problem on my own but got stuck after a while so looked at the solution.Question #8.
And this is what I got.

#include <stdio.h>

int main(void)
{
  char str[] =
    "73167176531330624919225119674426574742355349194934"
    "96983520312774506326239578318016984801869478851843"
    "85861560789112949495459501737958331952853208805511"
    "12540698747158523863050715693290963295227443043557"
    "66896648950445244523161731856403098711121722383113"
    "62229893423380308135336276614282806444486645238749"
    "30358907296290491560440772390713810515859307960866"
    "70172427121883998797908792274921901699720888093776"
    "65727333001053367881220235421809751254540594752243"
    "52584907711670556013604839586446706324415722155397"
    "53697817977846174064955149290862569321978468622482"
    "83972241375657056057490261407972968652414535100474"
    "82166370484403199890008895243450658541227588666881"
    "16427171479924442928230863465674813919123162824586"
    "17866458359124566529476545682848912883142607690042"
    "24219022671055626321111109370544217506941658960408"
    "07198403850962455444362981230987879927244284909188"
    "84580156166097919133875499200524063689912560717606"
    "05886116467109405077541002256983155200055935729725"
    "71636269561882670428252483600823257530420752963450";
  size_t len = sizeof str - 1;
  size_t i;
  unsigned max = 0;

  for (i = 0; i < len-4; i++) {
    unsigned p = 1;
    size_t j;

    for (j = 0; j < 5; j++) {
      p *= (unsigned)(str[i+j]-'0');
    }
    if (p > max) {
      max = p;
    }
  }
  printf("%u\n", max);
  return 0;
}


My Problem : I didn't understand why there was -'0' in this line

 p *= (unsigned)(str[i+j]-'0');

Sorry if my question is very stupid. But I can't seem to figure it out.

tckmn
'0' - '0' == 0
'1' - '0' == 1
'2' - '0' == 2
etc.

Basically, it's for converting a char to its corresponding digit.

An explanation is that characters map directly to ASCII values:

'0' == 48
'1' == 49
'2' == 50
etc.

And the values are sequential. Therefore, when you subtract the lowest digit, you get the position after that digit, which will also be the int value of the digit.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related