10 URAL 1014 Product of Digits

找一个最小的正整数QQ的各个位置上的数字乘积等于N

每一位只能是2-9,0和1没有用,那么能用尽量大的数就先用大的数,这样保证Q的位数最少,

从9枚举到2,如果W的因子只有9-2,那么有解,在把这些因子从小到大输出即可,否则无解。

注意要特判0和1,因为要求最小正整数,所以0的时候答案应该是10.

#include<cstdio>

int main()
{
    int i,n,cnt,ans[40];
    while(~scanf("%d",&n))
    {
        if(n==0) printf("10\n",n);
        else if(n<10) printf("%d\n",n);
        else
        {
            cnt=0;
            for(i=9;i>=2&&n!=1;i--)
            {
                while(n%i==0&&n!=1)
                {
                    ans[cnt++]=i;
                    n/=i;
                }
            }
            if(n!=1) puts("-1");
            else
            {
                for(i=cnt-1;i>=0;i--) printf("%d",ans[i]);
                puts("");
            }
        }
    }
    return 0;
}
时间: 2024-10-24 04:10:07

10 URAL 1014 Product of Digits的相关文章

URAL 1014 Product Of Digits

注意特判 0 1 分解因子 从9到2 1 import java.util.Scanner; 2 3 public class P1014 4 { 5 public static void main(String args[]) 6 { 7 try (Scanner cin = new Scanner(System.in)) 8 { 9 while (cin.hasNext()) 10 { 11 int n = cin.nextInt(); 12 StringBuilder builder =

UVA - 993 - Product of digits (简单贪心)

993 Product of digits For a given non-negative integer number N, ?nd the minimal natural Q such that the product of all digits of Q is equal N. Input The ?rst line of input contains one positive integer number, which is the number of data sets. Each

993 - Product of digits

题目:993 - Product of digits 题目大意:将一个数通过因式分解变成另一个由因子组成的最小的数. 解题思路:因为要组成数,所以因子只需要从 2 - 9,又因为需要最小的数,所以因式分解从最大的因子开始,这样位数最少,最后输出从最小的因子输出,保证最小.1的话需要特判,因为所有的数都有因子1. 代码: #include <stdio.h> #include <string.h> const int N = 10; int c[N]; int n; bool fac

UVa 993 - Product of digits

题目:给你一个整数n,求一个数m,使得m的每个位数的乘积是n,求最小的m. 分析:贪心.直接从9到2枚举所有的因数,统计即可.如果还有大于9的素数这输出-1. 说明:今天Timus发邮件,说我的这个题目,在那边的解错了╮(╯▽╰)╭. #include <iostream> #include <cstdlib> #include <cstdio> using namespace std; int save[10]; int main() { int n,m,now; w

uva 993 Product of digits (分解因子)

uva 993 Product of digits 题目大意:给定一个数N,要求出一个数,使得这个数的每一位相乘会等于N,且这个数的值最小. 解题思路:简单的分解因子.要注意的地方有两点:1) 因子从9开始向2遍历,可以保证位数最小: 2)当N等于1是最好特殊处理. #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std;

1281. Subtract the Product and Sum of Digits of an Integer

Given an integer number n, return the difference between the product of its digits and the sum of its digits. Example 1: Input: n = 234 Output: 15 Explanation: Product of digits = 2 * 3 * 4 = 24 Sum of digits = 2 + 3 + 4 = 9 Result = 24 - 9 = 15 Exam

leetcode 21_Merge Two Sorted Lists &amp; leetcode_258 Add Digits &amp; leetcode_66plus one

l leetcode 21_Merge Two Sorted Lists 题目:Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 解法: #include <iostream> using namespace std; struct ListNode { int

【LeetCode】数组-10(66)-数组表示的数加一

思路: 只在digit数组的最后一位加一,如果加一产生进位则当前为减10并且修改进位变量使其在下一次循环的时候对下一位产生加一的影响,如果没有进位的产生直接break循环. 最后判断如果最高位有进位,在重新申请数组(比原来数组长一位),把第一位设置为1,其他的把上面的数组复制过来即可. [正确代码] 1 class Solution { 2 public int[] plusOne(int[] digits) { 3 boolean carry = false;//设置进位 4 digits[d

索引深入浅出(9/10):过滤索引

过滤索引(Filtered index )是在SQL Server 2008里新引入的功能.到目前我们谈到的索引都是在建立在整张表上的.换句话说,索引和表有一样的记录树.使用过滤索引,我们可以创建表子集的索引.这个可以通过创建索引的时候加上where子语完成.这个可以帮助在存储上减小索引的大小同样索引的深度.在索引创建语句的where条件决定了索引里是否包含该记录. 这在大表上是一个巨大的性能提升,如果有大量的查询只查表的部分数据.常规索引都是建立在整个表上的,而忽略了大多数查询只查表的一部分数