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 ...
随机推荐
- Application应用程序级变量
对于每一个网站访问用户都要访问的变量,应该将它设为________变量.(选择1项) A. Session B. Reques C. Response D. Application 解答:D
- Android SDK代理server解决国内不能更新下载问题
读者须知:本篇文章中最靠谱的是第三种方式,近期有读者反映第三种方式也不行了,以下提供一点其它途径的开源镜像网站: 国内高校的开源镜像站 中国科学技术大学(debian.ustc.edu.cn) 上海交 ...
- 基于docker部署的微服务架构(四): 配置中心
原文:http://www.jianshu.com/p/b17d65934b58%20 前言 在微服务架构中,由于服务数量众多,如果使用传统的配置文件管理方式,配置文件分散在各个项目中,不易于集中管理 ...
- 经典SQL面试题(转)
http://www.cnblogs.com/kcher90/archive/2013/03/13/2957932.html 有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录 ...
- 哪些工具可以在word中快速绘制图形
在数学试卷.论文.电子教案等编写过程中,我们经常要作出数学图形或图像,若用Word自身携带的绘图工具绘制,多有不便.比如一些曲线的形状很难画得像,画到位,作图时修修改改,颇为费力,所以需要借助一些辅助 ...
- hdu 4496(并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4496. 思路:简单并查集应用,从后往前算就可以了. #include<iostream> ...
- leetcode -- Unique Binary Search Trees todo
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- sys.argv 详细用法
sys.argv 用于获取命令行参数,用法如下: [root@localhost ~]$ cat 1.py #!/usr/bin/env python #-*- coding:utf-8 -*- im ...
- studio导入Eclipse 项目要改的文件
添加下面文件即可,一个不能少 1. project 2.project.properties 3.classpath 4.AndroidManifest.xml 以上目录都有可以正常导入studio中
- 《C++ Primer Plus》学习笔记——C++程序创建到运行的整个过程
当你编写了一个C++,如何让它运行起来呢?具体的步骤取决于计算机环境和使用的C++编译器,但大体如下: 1.使用文本编辑器编写程序,并将其保存到文件中,这个文件就是程序的源代码. 2.编译源代码.这意 ...