Project Euler/13
From charlesreid1
The problem
This problem asks us to work out the first ten digits of the sum of a sequence of one-hundred 50-digit numbers.
The solution
Data structure
To do this problem I used a sequence of queues to examine these numbers one column at a time. Each 50-digit number was loaded into a char queue, and to examine the left-most digit, I popped each char and converted it to a number, then processed the running sum.
Algorithm
We know that if we have 100 numbers, the maximum of any given column is 900, which means the sum of digits in any given column can only affect two columns over, at most. For example, if I were to change all the digits in the ones place, that would change the ones place, the tens place, and possibly the hundreds place of the sum, but it will never affect the thousands place of the sum.
This gives us the information we need - to compute 1 digit of the answer, we sum up all of the leading digits, and we know that whatever is in the next column can never affect more than two columns over, so if we sum all the digits in the first column, the third place of that sum will be the first digit of the sum of all of those numbers. From there we can keep moving over, until we've generated 10 digits - then we keep moving over two more columns, since we know that a given column can be affected by the next two columns.
Project Euler project euler notes
Round 1: Problems 1-20 Problem 1 · Problem 2 · Problem 3 · Problem 4 · Problem 5 · Problem 6 · Problem 7 · Problem 8 · Problem 9 · Problem 10 Problem 11 · Problem 12 · Problem 13 · Problem 14 · Problem 15 · Problem 16 · Problem 17 · Problem 18 · Problem 19 · Problem 20 Round 2: Problems 50-70 Problem 51 · Problem 52 · Problem 53 · Problem 54 · Problem 55 · Problem 56 · Problem 57 · Problem 58 · ... · Problem 61 · Problem 62 · Problem 63 · Problem 64 · Problem 65 · Problem 66 · Problem 67 Round 3: Problems 100-110 Problem 100 · Problem 101 · Problem 102 Round 4: Problems 500-510 Problem 500 · Problem 501 * · Problem 502 * Round 5: Problems 150-160 Round 6: Problems 250-260 Round 7: Problems 170-180
|