Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- class VampireNumber
- {
- public:
- VampireNumber(int i, int k);
- ~VampireNumber() {};
- void print();
- void set_Number(unsigned long l);
- unsigned long get_Number() { return number; }
- bool isValid();
- private:
- unsigned long number;
- std::vector<long> digits;
- std::vector<long> pairs;
- const int count_of_digits;
- const int count_of_fang_digits;
- bool is_valid;
- void fill_vectors();
- void build_pairs();
- int check();
- void lame_sort();
- unsigned long get_ProductOfPairs();
- };
- VampireNumber::VampireNumber(int i, int k) : number(0), digits(i, 0), pairs(k, 0), count_of_digits(i), count_of_fang_digits(k), is_valid(false)
- {
- }
- void VampireNumber::set_Number(unsigned long l)
- {
- number = l;
- }
- void VampireNumber::lame_sort()
- {
- std::sort(digits.begin(), digits.end());
- }
- unsigned long VampireNumber::get_ProductOfPairs()
- {
- unsigned long tmp = 1;
- for(int i=0; i < pairs.size(); i++)
- tmp *= pairs[i];
- return tmp;
- }
- void VampireNumber::print()
- {
- std::string to_print;
- for(int i=0; i < pairs.size(); i++)
- {
- to_print += std::to_string(pairs[i]);
- to_print += (i < pairs.size()-1)?"*":"";
- }
- std::cout << to_print;
- std::cout << std::endl;
- }
- void VampireNumber::build_pairs()
- {
- int k = 0;
- for(int i=0; i < pairs.size(); i++)
- {
- pairs[i] = (digits[k] * 10) + digits[k+1];
- k += count_of_digits / count_of_fang_digits;
- }
- }
- void VampireNumber::fill_vectors()
- {
- unsigned long tmp = number;
- for(int i=0; i < count_of_digits; i++)
- {
- digits[i] = tmp % 10;
- tmp /= 10;
- }
- }
- int VampireNumber::check()
- {
- for(int i=0; i < digits.size(); i++)
- {
- if(digits[i] == digits.size())
- break;
- if((digits[i] == 0) && (digits[i+1] == 0))
- {
- is_valid = false;
- return 0;
- }
- }
- return 1;
- }
- bool VampireNumber::isValid()
- {
- fill_vectors();
- do
- {
- if(check())
- {
- build_pairs();
- if(number == get_ProductOfPairs())
- return true;
- }
- }while(std::next_permutation(digits.begin(), digits.end()));
- return false;
- }
- int main(int argc, char *argv[])
- {
- VampireNumber vampy(6, 3);
- std::vector<unsigned long> the_numbers;
- for(unsigned long i = 100000; i < 1000000; i++)
- {
- vampy.set_Number(i);
- if(vampy.isValid())
- {
- std::cout << vampy.get_Number() << "=";
- vampy.print();
- }
- }
- std::cout << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment