• 数的分解 时间限制: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
    "); continue;} //易错
    17         else if(n < 10)    
    18         {printf("%d
    ", 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
    "); continue;}
    33             for(int i = 2; i <= 9; ++i) //从小到大输出每个因子即可
    34                 for(int j = 1; j <= res[i]; ++j)
    35                     printf("%d", i);
    36             printf("
    ");
    37         }
    38     }
    39     return 0;
    40 }
    View Code

    第二种方法比较普遍

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

  • 相关阅读:
    Hadoop OutputFormat浅析
    硬盘性能
    HDFS读文件过程分析:读取文件的Block数据
    HDFS写文件过程分析
    JAVA中的编码分析
    HBase 写入优化
    HBase ttl 验证
    大数据多维分析平台的实践
    TiDB在特来电的探索
    Druid 基础使用-操作篇(Pivot、plyql)
  • 原文地址:https://www.cnblogs.com/chenzhiyuan/p/5168709.html
Copyright © 2020-2023  润新知