数的分解 时间限制:1000 ms | 内存限制:65535 KB 难度:1

数的分解

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
 
描述

你的任务是找到一个最小的正整数Q,使Q的各位数的乘积等于N。

 
输入
最多450组测试数据。数据以EOF结尾。
输入一个整数N(0 ≤ N ≤ 400)。
输出
输出Q,如果Q不存在则输出−1。
样例输入
10
5
样例输出
25
5
来源
ural
 1 #include<stdio.h>
 2 #include<iostream>
 3 
 4 using namespace std;
 5 
 6 int main(){
 7     int n;
 8     while(scanf("%d",&n)!=EOF){
 9 
10        int i = 0,ge,shi,bai,qi;
11        for(;i <= 10000 && n;i++){
12              if(i < 10){
13                 if(i == n)    
14                    break;
15           }
16           else if(i < 100){
17                ge = i % 10;
18                shi = i / 10;
19                if(ge * shi == n)
20                   break;
21           }
22           else if(i < 1000){
23              ge = i % 10;
24                shi = (i / 10)%10;
25                bai = i / 100;
26                if(ge * shi * bai == n)
27                   break;
28           }
29           else {
30                ge = i % 10;
31                shi = (i / 10)%10;
32                bai = (i / 100)%10;
33                qi = i / 1000;
34                if(ge * shi * bai * qi== n)
35                   break;
36           }
37        }
38        if(i==10001)
39           cout<<-1<<endl;
40        else if(n==0)
41           cout<<10<<endl;
42        else
43              cout<<i<<endl;
44     }
45     
46     return 0;
47 }
View Code
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<string>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 int res[10];
 8 
 9 int main()
10 {
11     int n;
12     while(scanf("%d", &n) !=    EOF)
13     {
14         memset(res, 0, sizeof(res));
15         if(n == 0)    
16         {printf("10\n"); continue;} //易错
17         else if(n < 10)    
18         {printf("%d\n", n); continue;}
19         else
20         {
21             int tmp = n;
22             for(int i = 9; i >= 2; ) // 统计2-9的因子个数(倒序是关键~)
23             {
24                 if(tmp % i == 0)
25                 {
26                     res[i]++;
27                     tmp /= i;
28                 }
29                 else
30                     i--;
31             }
32             if(tmp > 10) {printf("-1\n"); continue;}
33             for(int i = 2; i <= 9; ++i) //从小到大输出每个因子即可
34                 for(int j = 1; j <= res[i]; ++j)
35                     printf("%d", i);
36             printf("\n");
37         }
38     }
39     return 0;
40 }
View Code

第二种方法比较普遍

如果一个数 N (0<=N<=1000000000),那么就要用第二种方法

 

posted on 2016-01-29 13:21  远志~  阅读(775)  评论(0编辑  收藏  举报

导航