sdut3140 A*B(math)
题目:传送门
题目描述
输入
The following T lines each contain a single integer number N (0<=N<=2^31-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)的更多相关文章
- Python标准库-数字的处理函数(math模块)
Python标准库-数字的处理函数(math模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. #!/usr/bin/env python #_*_conding:utf-8_* ...
- 组合数学(math)
组合数学(math) 题目描述 为了提高智商,zjy开始学习组合数学.某一天她解决了这样一个问题:“给一个网格图,其中某些格子有财宝.每次从左上角出发,只能往右或下走.问至少要走几次才能把财宝全部捡完 ...
- PHP函数积累总结(Math函数、字符串函数、数组函数)
Math函数:10个较常用标红.abs — 绝对值acos — 反余弦acosh — 反双曲余弦asin — 反正弦asinh — 反双曲正弦atan2 — 两个参数的反正切atan — 反正切ata ...
- Java学习笔记26(Math类、Arrays类、BigInteger类、BigDecimal类)
Math类:数学工具类,做一些数学计算,开方,对数,三角函数等 所有方法都是静态方法,不需要建立对象,直接用类名调用即可 示例: 这里写几个在日常开发中会用到的,比如三角函数之类的平时不会用到,了解即 ...
- JavaScript的内置对象(Math对象)
Math对象概述 Math(算数)对象的作用是:执行常见的算数任务.保存数学公式和信息. 与我们在JavaScript 直接编写计算功能相比,Math 对象提供的计算功能执行起来要快得多. Math ...
- js 算數(Math)對象
算數對象不需要聲明,可以直接使用, Math對象方法及作用: round()四捨五入: random()生成0到1的隨機數: max()選擇較大的數: min()返回較小的數:
- 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库中有关的对数函数返回的都是浮点数,所以这又要涉 ...
- 内置对象(Math对象、Date对象、Array对象、String对象)常用属性和方法
Math对象 Math 是一个内置对象, 它具有数学常数和函数的属性和方法.不是一个函数对象. 与其它全局对象不同的是, Math 不是一个构造函数. Math 的所有属性和方法都是静态的. 跟数学 ...
- golang——随机数(math/rand包与crypto/rand包)
1.math/rand 包 1.1.math/rand 包实现了伪随机数生成器 1.2.主要方法 (1)func Seed(seed int64) 设置随机种子,不设置则默认Seed(1) (2)fu ...
随机推荐
- yum 安装 influxdb/telegraf
环境:centos 7 参考官网教程:http://docs.influxdata.com/telegraf/v1.9/introduction/installation/ 添加 yum 源: vim ...
- php url配置项
- PyCharm中设置console端的字体和大小
file--->setting,选择console Font,右侧primary font即设置console端的字体和大小
- [ACM] FZU 2086 餐厅点餐 (枚举)
roblem Description Jack近期喜欢到学校餐厅吃饭.好吃干净还廉价. 在学校餐厅.有a种汤,b种饭.c种面条,d种荤菜,e种素菜. 为了保证膳食搭配,Jack每顿饭都会点1~2样荤菜 ...
- 《Programming with Objective-C》第五章 Customizing Existing Classes
1.分类里面只新增函数,不要新增变量:虽然新增是语法合法的,但是编译器并不会为你的property合成相应的成员变量.setter和getter Categories can be used to d ...
- WebService远程调用(命令行调用)
远程调用webservice 方法, 通过wsdl命令,生成webservice 对应asmx 文件的对应类(cs文件),然后将此cs文件引用到当前项目中,项目其他地方需要调用webservice方法 ...
- THINKPHP5加载公共头部尾部模板方法
之前在3.2中用 <include file="public/header" /> 后来发现在thinkphp5中应该这样写才行 {include file=" ...
- 使用HTML5 WebStorage API构建与.NET对应的会话机制
HTML5的Web Storage API,我们也称为DOMStarage API,用于在Web请求之间持久化数据.在Web Starage API 出现之前,我们都是将客户端和服务端之间的交互数据存 ...
- Jmeter--压测dubbo接口
Dubbo Interface Demo:https://blog.csdn.net/qi_lin7/article/details/53759528 Demo2:https://blog.csdn. ...
- Hadoop伪分布安装详解(二)
目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...