[ create a new paste ] login | about

Link: http://codepad.org/jyxJF6K1    [ raw code | output | fork ]

C++, pasted on Jan 25:
#include <iostream>

using namespace std;

const int MAX_DIGIT = 5;

inline bool is_used(int number, int used)
{
    return 1 & (used >> number);
}

inline void set_used(int number, int &used)
{
    used |= 1 << number;
}

inline void unset_used(int number, int &used)
{
    used &= ~(1 << number);
}

void find_magic_number(int number, int digit, int used)
{
    if (digit == MAX_DIGIT) {
        int reverse_number = 0;
        for (int i = 0, k = 1; i < MAX_DIGIT; ++i, k *= 10) {
            reverse_number *= 10;
            reverse_number += number / k % 10;
        }

        if (number * 4 == reverse_number) {
            cout << number << " * 4 == " << reverse_number << endl;
        }

        return;
    }

    for (int i = 0; i < 10; ++i) {
        if (!is_used(i, used)) {
            int new_number = number * 10 + i;

            set_used(i, used);
            find_magic_number(new_number, digit + 1, used);
            unset_used(i, used);
        }
    }
}

int main()
{
    find_magic_number(0, 0, 0);

    return 0;
}


Output:
1
21978 * 4 == 87912


Create a new paste based on this one


Comments: