/******************************
作者:cncoderalex
博客:http://blog.youkuaiyun.com/cncoderalex
*******************************/
#include"Test.h"
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
#include<string>
using namespace std;
#define MAXN 20
int a[MAXN];
int BitCount;
void GetBit(int num)
{
BitCount = 0;
while (num)
{
a[BitCount++] = num % 10;
num /= 10;
}
}
bool IsOK(int num)
{
while (num)
{
int bit = num % 10;
num /= 10;
bool bFound = false;
for (int i = 0; i < BitCount; i++)
{
if (bit == a[i])
{
bFound = true;
break;
}
}
if (!bFound)
return false;
}
return true;
}
void PrintOneAns(int a, int b, int num)
{
printf("<%d>\n", num);
printf("%5d\n", a);
printf("X");
printf("%4d\n", b);
printf("-----\n");
int result1 = a * (b % 10);
int result2 = a * (b / 10);
printf("%5d\n", result1);
printf("%4d \n", result2);
printf("-----\n");
printf("%5d\n", a * b);
printf("\n");
}
void PrintFinalAns(int num)
{
printf("The number of solutions = %d\n", num);
}
int main()
{
printf("http://blog.youkuaiyun.com/cncoderalex");
printf("\n");
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int n = 0;
while (scanf("%d", &n) != EOF)
{
GetBit(n);
int AnsCount = 0;
for (int i = 100; i <= 999; i++)
{
if (IsOK(i))
{
for (int j = 10; j <= 99; j++)
{
if (IsOK(j))
{
int result1 = i * (j % 10);
int result2 = i * (j / 10);
int ans = i * j;
if (IsOK(result1) && IsOK(result2) && IsOK(ans))
{
PrintOneAns(i, j, ++AnsCount);
}
}
}
}
}
PrintFinalAns(AnsCount);
}
system("pause");
return 0;
}