Time limit: 3.000 seconds
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&page=show_problem&problem=934
For a given non-negative integer number N , find the minimal natural Q such that the product of all digits of Q is equal N .
The first line of input contains one positive integer number, which is the number of data sets. Each subsequent line contains one data set which consists of one non-negative integer number N (0N109) .
For each data set, write one line containing the corresponding natural number Q or `-1' if Q does not exist.
3 1 10 123456789
1 25 -1
题意:
给一个数N,是否存在这样的数Q,Q的所有位上的数之积等于N?
思路:
将N素因数分解,再合并整理即可。
复杂度:O(log N)
完整代码:
/*0.012s*/ #include <cstdio> #include <cstring> int main() { int t, index[8]; scanf("%d", &t); flag: while (t--) { memset(index, 0, sizeof(index)); int n; scanf("%d", &n); if (n <= 1) { printf("%d\n", n); continue; } //分解N while (n != 1) { int count = 0; if (!(n & 1)) index[0]++, n >>= 1; else count++; if (!(n % 3)) index[1]++, n /= 3; else count++; if (!(n % 5)) index[3]++, n /= 5; else count++; if (!(n % 7)) index[5]++, n /= 7; else count++; if (count == 4) { puts("-1"); goto flag; } } //2^3=8 index[6] += index[0] / 3, index[0] %= 3; //2^2=4 if (index[0] == 2) index[2] = 1, index[0] = 0; //3^2=9 index[7] += index[1] >> 1, index[1] &= 1; //2*3=6 if (index[0] & index[1]) index[4] = 1, index[1] = index[0] = 0; for (int i = 0; i < 8; ++i) while (index[i]--) putchar(i + 50); putchar(10); } return 0; }