Problem32

/*
 * \file   problem032.cpp
 * \brief  Project Euler - Probmel32
 *
 * \author Takushi Homma (b1006018@fun.ac.jp)
 */
#include <iostream>
#include <string>
#include <algorithm>
#include <set>
using namespace std;

int
main(int argc, char **argv)
{
    int ans = 0;
    set<int> set_ans;
    string  s = "123456789";

    do
    {
        for (unsigned int i = 1; i < 8; i++)
        {
            for (unsigned int j = i+1; j < 9; j++)
            {
                int num[3];
                int i_num = 0;
                memset(num, 0, 3*sizeof(int));

                for (unsigned int k = 0; k < s.size(); k++)
                {
                    if (k == i || k == j)
                    {
                        i_num++;
                    }
                    num[i_num] *= 10;
                    num[i_num] += s.at(k)-'0';
                }

                if (num[0]*num[1] == num[2])
                {
                    set_ans.insert(num[2]);
                }
            }
        }
    } while (next_permutation(s.begin(), s.end()));

    for (set<int>::iterator it = set_ans.begin(), e = set_ans.end(); it != e; it++)
    {
        ans += *it;
    }
    cout << ans << endl;
    

    return 0;

}