题目链接

题目大意:

给你两个整数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. 【设计模式】Java设计模式 - 动态代理

    [设计模式]Java设计模式 - 动态代理 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 最近工作比较忙,没啥时间学习 目录 [设计模 ...

  2. 员工离职困扰?来看AI如何解决,基于人力资源分析的 ML 模型构建全方案 ⛵

    作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...

  3. 通过IIS部署Flask项目

      本文主要介绍在Windows Server 2012R2上通过IIS部署Flask项目的过程,以及对TTFB延迟大问题的思考.关于如何申请云服务器,注册(子)域名,备案,开放云服务器端口,获取SS ...

  4. Q准则涡识别方法

    Q准则(Q Criterion)在涡识别中计算效率高,效果也不错,是一种常用的涡提取/识别方法. 了解Q准则需要从速度梯度张量入手,而速度梯度张量可以分解成两部分 \[\frac{\partial u ...

  5. 改变一个数组内元素的位置,不通过splice方法。

    这个数据 现在已经完成了,将本来在第一位的18代金券改到第31位,下面说一下怎么实现的. //currHotRightsTypeSorted这个是数据源头,legalRightsType这个是数据的分 ...

  6. 使用 Windows 包管理器 (winget) 安装 .Net

    用户可以在 Windows 10 和 Windows 11 计算机上使用 winget 命令行工具来发现.安装.升级.删除和配置应用程序. 此工具是 Windows 程序包管理器服务的客户端接口. 以 ...

  7. Vue+vant移动端处理弹窗不能滑动问题

    自己在做项目开发时,使用vantUI组件,在项目中遇到了弹窗组件里面当内容过多时,会出现滚动卡顿或者不能滚动问题,开始一直以为是自己的样式写的有问题,检查下来才发现并不是,而是弹窗组件的问题,于是找到 ...

  8. Codeforces Round #710 (Div. 3)

    emmm,就ac了3题 A题转换推下公式. tB题模拟,在第一个与最后一个变x后,直接i下标+k,判断当前下标前一个befor与最后一个last距离是否>k,是的话在当前下标往前找*字符然后改为 ...

  9. 一文讲清楚 JVM Safe Point

    大家好,我是树哥. 关于 Safe Point 是 JVM 中很关键的一个概念,但我估计有不少同学不是很懂.于是今天跟大家来深入聊聊 Safe Point,希望通过这篇文章能解答这样几个问题: 什么是 ...

  10. SpringMvc(五) - 支付宝沙箱和关键字过滤,md5加密,SSM项目重要知识点

    1.支付宝沙箱 1.1 jar包 alipay-sdk <!-- alipay-sdk --> <dependency> <groupId>com.alipay.s ...