Timus 1014. The Product of Digits 要求给出一个最小整数,其各位数字的乘积等于指定的数。
Problem Source: Ural State University Internal Contest '99 #2
解答如下:
这题的解法还是比较直接的。但是要注意当输入 N = 0 时,输出的答案应该是 10,而不是 -1。
返回目录
1014. The Product of Digits
Time Limit: 1.0 second
Memory Limit: 16 MB
Memory Limit: 16 MB
Your task is to find the minimal positive integer number Q so that the product of digits of Q is exactly equal to N.
Input
The input contains the single integer number N (0 ≤ N ≤ 109).
Output
Your program should print to the output the only number Q. If such a number does not exist print −1.
Sample
input | output |
---|---|
10 | 25 |
解答如下:
1 using System;
2 using System.IO;
3
4 namespace Skyiv.Ben.Timus
5 {
6 // http://acm.timus.ru/problem.aspx?space=1&num=1014
7 class T1014
8 {
9 static void Main()
10 {
11 new T1014().Run(Console.In, Console.Out);
12 }
13
14 void Run(TextReader reader, TextWriter writer)
15 {
16 Out(writer, GetDigits(int.Parse(reader.ReadLine())));
17 }
18
19 int[] GetDigits(int n)
20 {
21 int[] digits = new int[11];
22 if (n == 0) digits[10] = 1;
23 else if (n == 1) digits[1] = 1;
24 else
25 {
26 for (int i = 9; i > 1; i--)
27 {
28 while (n > 1 && n % i == 0)
29 {
30 n /= i;
31 digits[i]++;
32 }
33 }
34 if (n != 1) digits = null;
35 }
36 return digits;
37 }
38
39 void Out(TextWriter writer, int[] digits)
40 {
41 if (digits == null) writer.WriteLine(-1);
42 else
43 {
44 for (int i = 0; i < digits.Length; i++)
45 {
46 int n = digits[i];
47 while (n-- > 0) writer.Write(i);
48 }
49 writer.WriteLine();
50 }
51 }
52 }
53 }
54
2 using System.IO;
3
4 namespace Skyiv.Ben.Timus
5 {
6 // http://acm.timus.ru/problem.aspx?space=1&num=1014
7 class T1014
8 {
9 static void Main()
10 {
11 new T1014().Run(Console.In, Console.Out);
12 }
13
14 void Run(TextReader reader, TextWriter writer)
15 {
16 Out(writer, GetDigits(int.Parse(reader.ReadLine())));
17 }
18
19 int[] GetDigits(int n)
20 {
21 int[] digits = new int[11];
22 if (n == 0) digits[10] = 1;
23 else if (n == 1) digits[1] = 1;
24 else
25 {
26 for (int i = 9; i > 1; i--)
27 {
28 while (n > 1 && n % i == 0)
29 {
30 n /= i;
31 digits[i]++;
32 }
33 }
34 if (n != 1) digits = null;
35 }
36 return digits;
37 }
38
39 void Out(TextWriter writer, int[] digits)
40 {
41 if (digits == null) writer.WriteLine(-1);
42 else
43 {
44 for (int i = 0; i < digits.Length; i++)
45 {
46 int n = digits[i];
47 while (n-- > 0) writer.Write(i);
48 }
49 writer.WriteLine();
50 }
51 }
52 }
53 }
54
这题的解法还是比较直接的。但是要注意当输入 N = 0 时,输出的答案应该是 10,而不是 -1。
返回目录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述