题目链接

题目大意:

给你两个整数n, m。你需要求一个数,它满足如下条件:

  1. 是n的整数倍,且倍数小于m。
  2. 你应该使其末尾的0尽可能的多(如100后面有2个零,1020后面有一个零,我们应该输出100),在相同的情况下应该保证其最大化。
  3. 如果不能找到末尾有零的数就输出n * m 即可。

解题思路:

这属于构造类型了吧,我们构造的目标是满足条件下的末尾0最多的数。那怎么构造呢?

我们可以发现一个规律:只有因子出现2和5才会出现一个0,两个的话会出现2个.......(你可能会抬杠5*6=30不是出现了吗?30是可以分解为一个5,和 一个2的)。那么我们的目标就明确了,首先找到n里面的因子2和5的个数(当然要把后缀0先去了哈)

ll cnt2 = 0, cnt5 = 0;
int k = n;
while (k % 10 == 0) k /= 10; //去0
while (k % 2 == 0) cnt2 ++, k /= 2; //找2
while (k % 5 == 0) cnt5 ++, k /= 5; //找5

接下来就是匹配n的因子了,这里要先匹配5为保证最大化

ll res = 1;
while (cnt5 > 0 && res * 2 <= m) //匹配5
{
cnt5 --, res *= 2;
} while (cnt2 > 0 && res * 5 <= m) //匹配2
{
cnt2 --, res *= 5;
} while (res * 10 <= m) //匹配10
{
res *= 10;
} int t = m / res; //为保证其结果最大化,在保证m是res倍数的前提下,让其变为其倍数。同时也可以包括无法求得有后缀0的情况
if (t) res *= t;

AC代码:

#include<bits/stdc++.h>
#define ll long long
#define sz(a) ((int) (a).size())
#define vi vector< int >
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long
#define PII pair<int, int>
using namespace std; const int N = 1e6 + 10;
ll n, m; void solved()
{
cin >> n >> m;
ll cnt2 = 0, cnt5 = 0;
int k = n;
while (k % 10 == 0) k /= 10; //去0
while (k % 2 == 0) cnt2 ++, k /= 2; //找2
while (k % 5 == 0) cnt5 ++, k /= 5; //找5 ll res = 1;
while (cnt5 > 0 && res * 2 <= m) //匹配5
{
cnt5 --, res *= 2;
} while (cnt2 > 0 && res * 5 <= m) //匹配2
{
cnt2 --, res *= 5;
} while (res * 10 <= m) //匹配10
{
res *= 10;
} int t = m / res; //为保证其结果最大化,在保证m是res倍数的前提下,让其变为其倍数。同时也可以包括无法求得有后缀0的情况
if (t) res *= t; cout << n * res << '\n'; } int main(){
ios :: sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t;
cin >> t;
while (t -- ) solved(); return 0;
} /* stuff you should look for 你应该寻找的东西
* int overflow, array bounds (int)溢出,数组边界
* special cases (n=1?) 特殊情况(n=1?)
* do smth instead of nothing and stay organized 做一些事情而不是什么也不做,保证效率
* WRITE STUFF DOWN 将东西写下
* DON'T GET STUCK ON ONE APPROACH 不要在一个地方死磕
*/

1759D(数位变0)的更多相关文章

  1. PHP导出Excel 数字末尾变0或小数点解决办法

    为了管理方便,查阅直观性.很多网站, 或者系统都会自带导出excel或者cvs的功能.但是很多情况下,由于数字超过15位,会被显示成0或者加小数点处理.造成这种情况是由于Excel内 置的数值有效范围 ...

  2. mysql导出csv文件excel打开后数字用科学计数法显示且低位变0的解决方法

    Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0. Excel打开csv文件时,只要字段值都是数字,它 ...

  3. js数字过大js自动变0

    解决方案: <a onclick="checkDate(${item.billday},'${item.bankcard}',${item.limitmoney/100}) 加上引号变 ...

  4. csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法

    保存在csv中的 013812345678,前面的0会被去掉,后面是科学计数法显示.保存成 col1,="013812345678" 即可. 注意,分隔符逗号后面直接接“=”等号. ...

  5. 处女座和小姐姐(三)-数位dp1.0

    链接:https://ac.nowcoder.com/acm/contest/329/G来源:牛客网 题目描述 经过了选号和漫长的等待,处女座终于拿到了给小姐姐定制的手环,小姐姐看到以后直呼666! ...

  6. java自动给版本升级,遇9变0且前面一个版本加1

    /** * 自动升级版本号,版本号+1 * @param version * @return */ private String autoUpgradeVersion(String version){ ...

  7. Codeforces Round #191 (Div. 2) A. Flipping Game【*枚举/DP/每次操作可将区间[i,j](1=<i<=j<=n)内牌的状态翻转(即0变1,1变0),求一次翻转操作后,1的个数尽量多】

    A. Flipping Game     time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. c# 自动给版本升级,遇9变0且前面一个版本加1

    /// <summary> /// 版本辅助类 /// 创建人: /// 创建时间:2019-11-18 13:53:55 /// </summary> public clas ...

  9. 教你如何将txt复制到excel的各个单元格;并解决科学计数法显示问题及导致的个位数变0问题

    1.如果你的txt或log等文件中的数据每个数据刚好都回车了,那么直接粘贴到excel即可: 2.如果你的txt或log等文件中数据较多,回车之后的每一行数据仍需再次分列,那么要求:每一行中需要分列的 ...

  10. mysql状态取反(0变1,1变0)

    如果要改变status状态 update   table_name   status=ABS(status-1);   //取绝对值 则0-->1   1-->0

随机推荐

  1. Typora自动上传超级详细教程!!

    第一步检查环境变量 打开cmd 查看以下环境变量 需要软件: Typora PicGo gitee账号 配置node 配置git 第二步创建gitee仓库 设置仓库名直接创建,因为这里不能直接修改开源 ...

  2. Vue3 封装 Element Plus Menu 无限级菜单组件

    本文分别使用 SFC(模板方式)和 tsx 方式对 Element Plus el-menu 组件进行二次封装,实现配置化的菜单,有了配置化的菜单,后续便可以根据路由动态渲染菜单. 1 数据结构定义 ...

  3. 视频结构化 AI 推理流程

    「视频结构化」是一种 AI 落地的工程化实现,目的是把 AI 模型推理流程能够一般化.它输入视频,输出结构化数据,将结果给到业务系统去形成某些行业的解决方案. 换个角度,如果你想用摄像头来实现某些智能 ...

  4. ProxySQL 审计

    1.审计日志 ProxySQL 2.0.5 引入了审计日志.此功能允许跟踪某些连接活动.要启用此功能,需要配置变量 mysql-auditlog_filename,也就是审计日志的文件名.此变量的默认 ...

  5. 使用TLS安全的访问Minio服务

    官方文档地址:http://docs.minio.org.cn/docs/master/how-to-secure-access-to-minio-server-with-tls 查看这篇文章的操作步 ...

  6. MySQL配置不当导致Sonarqube出错的一次经历:Packet for query is too large (16990374 > 13421568)

    公司里部署了Jenkins + Sonarqube对项目代码进行构建和代码质量扫描. 某个大型项目报告项目构建失败.进jenkins看,该项目构建日志中的报错信息是这样的: 通过错误堆栈中的信息可以判 ...

  7. Elasticsearch:如何调试集群状态 - 定位错误信息

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/108973356

  8. 关于HM NISEDIT在新版系统下编译并运行提示权限不足问题的解决方案

    如果你使用过NSIS为你的项目制作过安装包,那HM nisedit一定是你绕不过去的槛,作为NSIS号称的最佳免费IDE/编辑器,功能齐全,与NSIS配合性能强悍,实至名归.只是开发作者最后版本更新在 ...

  9. Go微服务实战 - 从0到1搭建一个类Instagram应用(持续更新)

    概要 近几年各大移动应用基本都有社区Community(或动态Moments)的功能,展现形式各不相同,比如 国内的有:微博.朋友圈.抖音.小红书.keep.绿洲.即刻等 国外的有:Instagram ...

  10. 标题,ico动态化

    //获取ico元素 var link = document.querySelector("link[rel*='icon']"); link.href = "image/ ...