Skip to content

Instantly share code, notes, and snippets.

@alabombarda
Created June 2, 2015 15:57
Show Gist options
  • Save alabombarda/c267f6ba9940d67aa397 to your computer and use it in GitHub Desktop.
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.
#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