Created
June 2, 2015 15:57
-
-
Save alabombarda/c267f6ba9940d67aa397 to your computer and use it in GitHub Desktop.
Part 2 of the rmotr.com python scholarship. C++ program that takes a large number formatted as a string and finds the biggest product of n adjacent digits within the string.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
#include <vector> | |
unsigned long long int adjDigProduct(std::vector<int> NUMB, int digits, unsigned long long int biggest); | |
std::vector<int> vectorify(std::string s); | |
int main() | |
{ | |
//initialize variables | |
unsigned long long int biggest = 0; | |
const std::string input = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"; | |
int numDigits; | |
//receive input | |
std::cout << "How many adjacent digits?\n"; | |
std::cin >> numDigits; | |
//output | |
std::cout << "The biggest product for " << numDigits << " digits is " << adjDigProduct(vectorify(input), numDigits, biggest) << "\n"; | |
} | |
unsigned long long int adjDigProduct(std::vector<int> NUMB, int digits, unsigned long long int biggest) | |
{ | |
//test base case, reached the end of the vector | |
if (NUMB.size() < digits) | |
return biggest; | |
unsigned long long int product = 1; | |
//multiply "digits"-number of elements of the vector together | |
for (int i = 0; i < digits; i++) | |
product *= NUMB[i]; | |
//remove the first element of the vector for recursion | |
NUMB.erase(NUMB.begin()); | |
//if our new product is bigger than the previous biggest, send it instead | |
if (product > biggest) | |
return adjDigProduct(NUMB, digits, product); | |
else | |
return adjDigProduct(NUMB, digits, biggest); | |
} | |
//converts a string of single-digit numbers with no delimiters into a vector of integers | |
std::vector<int> vectorify(std::string s) | |
{ | |
std::vector<int> v; | |
for (int i = 0; i < s.length(); i++) | |
v.push_back((s.at(i) - '0')); | |
return v; | |
} | |
/* | |
TEST INPUT: | |
7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 | |
SAMPLE OUTPUT: | |
How many adjacent digits? | |
4 | |
The biggest product for 4 digits is 5832 | |
How many adjacent digits? | |
5 | |
The biggest product for 5 digits is 40824 | |
How many adjacent digits? | |
13 | |
The biggest product for 13 digits is 23514624000 | |
How many adjacent digits? | |
17 | |
The biggest product for 17 digits is 5292994896000 | |
How many adjacent digits? | |
25 | |
The biggest product for 25 digits is 94810963968000000 | |
How many adjacent digits? | |
50 | |
The biggest product for 50 digits is 17371650400163201024 | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment