Finding the nth digit for credit card number

I'm having a hard time trying to find the 2nd to last digit of the user's credit card number, since that's the starting point for Luhn's algorithm. Is there a way to convert a long to an array and then get the 2nd to last position of that array? I was able to find the last digit:

long long l = 12345686868;
int last_digit = (l % 10);
printf("%i\n ", last_digit);

An array is not strictly required to solve this.

You already have the mechanism to extract the last digit from a number. You just need to extend this by using use division to "shift" the digits the required number of places.

For example, if you have the number 1234, to get the second digit you can divide by 10, to get 123. Using 123 mod 10 will give you the digit 3.

To get the third and fourth digits you would just need to divide by 100 and 1000 respectively.

Note the pattern here. To get the digit at position 2 you divide by 100, which is 10 raised to the power of 2, or (10^2). 1000 is 10 to the 3 or (10^3), and so on.

Or more succinctly, you can expose the nth digit by dividing by the nth power of 10.

Another different solution would be to use sprintf to convert the number into a string. This hasn't been covered yet at this point in the course, but if you have some prior experience (or are feeling brave) then you might want to try that approach. Use man sprintf from the command line to see how this might work.

• So I got the second to last digit and from there onwards. Separating the products' digits and adding them up is giving me trouble. For example for this credit card number: (1234567), 12, 8, and 4 would be the result of multiplying every other digit by 2. How would you add the digits so that it's in a form of: 1 + 2 + 8 + 4? I'm thinking again in putting the resulting numbers into an array. Although, I don't know how that would access '1' and '2' in the number '12'. Jul 31 '14 at 19:12
• You could loop through the digits and use the above algorithms to extract the digits. The trick is figuring out how many digits are in the number, which can be done using a loop, if/else structure, or a logarithm. Open another question and I can provide more info. Jul 31 '14 at 20:30
• Opened another question, thanks! Jul 31 '14 at 20:48
• I did use sprintf , succeeded, but found no discussion about this on the web (reddit, facebook,...) until now. Just started the course Is sprintf the most efficient yet? Mar 11 '15 at 4:03

You can use arithmetic to loop through the numbers.

12345686868 % 10 = 8