题目:传送门

题目描述

Your task is to find the minimal positive integer number Q so that the product of digits of Q is exactly equal to N.

输入

The first line of input contains T, number of test cases. 
The following T lines each contain a single integer number N (0<=N<=2^31-1).

输出

For each test case, your program should first print to the output "Case #i:"(i is the case number) in one line, and then the number Q in the second line. If such a number does not exist print -1.

示例输入

1

10

示例输出

Case #1:
25

题意:求一个最小的正整数,使得该正整数的各位数字乘积等于N。(其中正整数这一条件是个坑,0不是正整数,如果输入n==0,则输出结果为10)

因为是各位乘积,所以这题一看就是要分解质因子,如果这个数存在超过10的质因子,则输出-1,否则就是搭配这些质因子使结果最小,因为存在质因子2,3,5,7,7与5只能单独

放在一位上(因为他与其它质因子作积都超过10),之后就是搭配2,3,首先尽可能的搭配两个三,三个2.......总之我就是分解完质因子后暴力做的。

官方解释:

i=9->2每次判断N%i是否等于0,如果等于0,则将9放在生成的数的最后一位。循环结束后判断N是否为1,如果不为1说明无解。举个例子,39=3*13,是无解的。有个特别坑的地方,就是N==0的时候答案是10,而不是0。为什么呢?因为0不是正整数啊~

还是官方解释的言简意赅,我做的有点麻烦,但是思想都是一样的,直接贴代码了!

#include <iostream>
#include <algorithm>
#include <math.h>
#include <map>
#include <queue>
#include <stack>
#define inf 0x3f3f3f3f
#include <stdio.h>
#include <string.h>
typedef long long ll;
#define mod 10000007
#define eps 1e-9
using namespace std;
int n,ans[],num[],tt,c[],mm;
int main()
{
int T,K=,tt;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
tt=;
printf("Case #%d:\n",++K);
if(n==)
{
printf("10\n");
continue;
}
else if(n==)
{
printf("1\n");
continue;
}
memset(num,,sizeof(num));
for(ll i=;i*i<=n;i++)
{
if(n%i==)
{
ans[tt]=i;
num[tt]++;
n/=i;
while(n%i==)
{
num[tt]++;
n/=i;
}
tt++;
}
}
if(n>)
{
ans[tt]=n;
num[tt++]++;
}
bool flag=false;
for(int i=;i<tt;i++)
{
if(ans[i]>)
{
flag=true;
break;
}
}
if(flag)
{
printf("-1\n");
continue;
}
mm=;
for(int i=tt-;i>=;i--)
{
if(ans[i]==)
{
for(int j=;j<=num[i];j++)
c[mm++]=;
}
else if(ans[i]<) break;
}
for(int i=tt-;i>=;i--)
{
if(ans[i]==)
{
for(int j=;j<=num[i];j++)
c[mm++]=;
}
else if(ans[i]<) break;
}
bool ff=false;
bool yong=false;
for(int i=;i<tt;i++)
{
if(ans[i]==)
{
if(num[i]%==)
{
while(num[i])
{
c[mm++]=;
num[i]-=;
}
}
else
{
ff=true;
while(num[i]>)
{
c[mm++]=;
num[i]-=;
}
}
}
else if(ans[i]>) break;
}
if(ff&&ans[]!=)
{
c[mm++]=;
yong=true;
}
else if(!ff&&ans[]==)
{
while(num[])
{
if(num[]>=)
{
c[mm++]=;
num[]-=;
}
else if(num[]>=)
{
c[mm++]=;
num[]-=;
}
else
{
c[mm++]=;
num[]-=;
}
}
}
else if(ff&&ans[]==)
{
while(num[])
{
if(num[]>=)
{
c[mm++]=;
num[]-=;
}
else if(num[]>=)
{
if(!yong)
{
c[mm++]=;
num[]-=;
yong=true;
continue;
}
c[mm++]=;
num[]-=;
}
else
{
if(!yong)
{
yong=true;
c[mm++]=;
num[]-=;
continue;
}
c[mm++]=;
num[]-=;
}
}
}
if(!yong&&ff)
c[mm++]=;
sort(c,c+mm);
for(int i=;i<mm;i++)
{
printf("%d",c[i]);
}
printf("\n");
}
return ;
}

sdut3140 A*B(math)的更多相关文章

  1. Python标准库-数字的处理函数(math模块)

    Python标准库-数字的处理函数(math模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. #!/usr/bin/env python #_*_conding:utf-8_* ...

  2. 组合数学(math)

    组合数学(math) 题目描述 为了提高智商,zjy开始学习组合数学.某一天她解决了这样一个问题:“给一个网格图,其中某些格子有财宝.每次从左上角出发,只能往右或下走.问至少要走几次才能把财宝全部捡完 ...

  3. PHP函数积累总结(Math函数、字符串函数、数组函数)

    Math函数:10个较常用标红.abs — 绝对值acos — 反余弦acosh — 反双曲余弦asin — 反正弦asinh — 反双曲正弦atan2 — 两个参数的反正切atan — 反正切ata ...

  4. Java学习笔记26(Math类、Arrays类、BigInteger类、BigDecimal类)

    Math类:数学工具类,做一些数学计算,开方,对数,三角函数等 所有方法都是静态方法,不需要建立对象,直接用类名调用即可 示例: 这里写几个在日常开发中会用到的,比如三角函数之类的平时不会用到,了解即 ...

  5. JavaScript的内置对象(Math对象)

    Math对象概述 Math(算数)对象的作用是:执行常见的算数任务.保存数学公式和信息. 与我们在JavaScript 直接编写计算功能相比,Math 对象提供的计算功能执行起来要快得多. Math ...

  6. js 算數(Math)對象

    算數對象不需要聲明,可以直接使用, Math對象方法及作用: round()四捨五入: random()生成0到1的隨機數: max()選擇較大的數: min()返回較小的數:

  7. BC#29A:GTY's math problem(math) B:GTY's birthday gift(矩阵快速幂)

    A: HDU5170 这题让比较a^b与c^d的大小.1<=a,b,c,d<=1000. 显然这题没法直接做,要利用对数来求,但是在math库中有关的对数函数返回的都是浮点数,所以这又要涉 ...

  8. 内置对象(Math对象、Date对象、Array对象、String对象)常用属性和方法

    Math对象 Math 是一个内置对象, 它具有数学常数和函数的属性和方法.不是一个函数对象. 与其它全局对象不同的是, Math 不是一个构造函数.  Math 的所有属性和方法都是静态的. 跟数学 ...

  9. golang——随机数(math/rand包与crypto/rand包)

    1.math/rand 包 1.1.math/rand 包实现了伪随机数生成器 1.2.主要方法 (1)func Seed(seed int64) 设置随机种子,不设置则默认Seed(1) (2)fu ...

随机推荐

  1. 容斥 - HDU 4135 Co-prime

    Co-prime Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和一 ...

  2. 【BZOJ】1618: [Usaco2008 Nov]Buying Hay 购买干草(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1618 裸的01背包,注意背包的容量不是v即可. #include <cstdio> #i ...

  3. 【BZOJ】1681: [Usaco2005 Mar]Checking an Alibi 不在场的证明(spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1681 太裸了.. #include <cstdio> #include <cstr ...

  4. PHP项目中经常用到的无限极分类函数

    //无限极分类函数调用 function getTree($data,$parent_id = 0,$dept_level = 0){ static $tree = []; foreach ($dat ...

  5. 剑指 offer set 26 不用加减乘除做加法

    总结 1. Leetcode 上有一道题, 是不用乘除做乘法, 那道题算是背包问题的变形 2. 不用加减乘除, 还可以用移位操作 3. 将数字转成二进制格式, 然后运用二进制亦或, 移位运算解决 3. ...

  6. 13个非常实用的JavaScript小技巧

    使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用 ...

  7. 记录初次使用tesseract的过程

    目录 简介 安装tesseract 安装成功 python应用识别图片 简介 这个谷歌的识别项目早就听说了,使用之后发现,真的很厉害.写下初次简单使用的过程吧. 安装tesseract 谷歌的开源识别 ...

  8. css3中的动画功能

    直接用我的一段代码演示下css3中实现动画效果的事例,让一个div自动旋转起来 代码如下: <!doctype html> <html lang="en"> ...

  9. Code Forces 645C Enduring Exodus

    C. Enduring Exodus time limit per test2 seconds memory limit per test256 megabytes inputstandard inp ...

  10. 在Ubuntu上搭建hive环境

    一.准备软件 二.安装虚拟机 1.新建虚拟机向导 2.安装客户机操作系统 3.用户名密码设置 4.设置虚拟机名称和保存位置 5.处理器设置 6.设置虚拟机内存 7.然后一直next下去(有的根据自己的 ...