传送门UVa 993 - Product of digits
题意:输入一个数N,判断能不能让输出的数的各个位的乘积等于N。如果不能输出-1.
根据题意,也就是说N的因数范围是2~9,所以只要让N对2~9分解因子就可以。如果N,比如是11,没有2~9的因子,那么就不能得到这个数。
另外,分解的时候要从9开始,然后到2.因为比如100,可以被分解为2 2 5 5,也可以是4 5 5,显然后者小。
但是如果这样,先分解出来的是大的,怎么办呢。。
用栈存就可以了。
#include <cstdio>
#include <stack>
using namespace std;
stack<int> st;
int n;
void Resolve()
{
int i;
while (true)
{
for (i = 9; i >= 2; i--)
{
if (n % i == 0)
{
st.push(i);
n /= i;
break;
}
}
if (i == 1)
break;
}
}
int main()
{
//freopen("input.txt", "r", stdin);
int T, i, j;
scanf("%d", &T);
while (T--)
{
while (!st.empty())
st.pop();
scanf("%d", &n);
if (n == 0 || n == 1)
{
printf("%d\n", n);
continue;
}
Resolve();
if (n != 1)
{
printf("-1\n");
continue;
}
while (!st.empty())
{
printf("%d", st.top());
st.pop();
}
printf("\n");
}
return 0;
}