using System; using System.Collections.Generic; using System.Collections; using System.Linq; using System.Text; namespace Timus_Online { class ProductOfDigits { static void Main() { string[] input = Console.In.ReadToEnd().Split(new char[] { ' ', '\t', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); int N = int.Parse(input[0]); int[] Prime = new int[]{9,8,7,6,5,4,3,2}; ArrayList myArry = new ArrayList(); bool flag=true; if (N == 0) myArry.Add(10); else if (N < 10) myArry.Add(N); else { int temp; for (int i = 0; i < Prime.Length; ++i) { if (N % Prime[i] == 0) { temp = Prime[i]; N /= Prime[i]; while (N % Prime[i] == 0) { if (temp * Prime[i] <= 9) temp = temp * Prime[i]; else { myArry.Add(temp); temp = Prime[i]; } N /= Prime[i]; } myArry.Add(temp); } } if (N > 10) flag = false; } if (flag == false) Console.WriteLine("-1"); else { myArry.Sort(); foreach(int x in myArry) { Console.Write(x); } Console.WriteLine(); } } } }
题目意思就不说了。
方法:
因为N是1到9之间的数的积,所以从大到小找出N在1到9之间的因数就行了。最后从小到大排序后就是结果了。
如果N不论怎么分解,总是有一大于10的因数,则输出-1.
另外0要特别处理,因为find the minimal positive integer number Q. 语言的差别真要命。。。