【Make It Round】

该程序计算在通货膨胀情况下,商品价格如何调整以获得末尾零最多的新价格。通过分解n和m(商品原价和允许的最大倍数),寻找2和5的最大公约数来确定零的数量。如果无法得到更多零,则输出n乘以m的最大值作为新价格。
摘要由CSDN通过智能技术生成

Berlandia发生了通货膨胀,所以商店需要改变商品的价格。给出了良好n的当前价格。允许将商品价格提高k倍,其中1≤k≤m,k为整数。输出最全面的商品新价格。也就是说,在末尾具有最大数目的零的一个。如果有几种可能的变体,则输出新价格最大的变体。如果不可能得到一个更圆的价格,则输出n∙m(即最大可能价格)。


每个2*5都能产生1个0,若n*k的末尾0最多,则2*5的个数最多,n不断除以5,m不断除以2,或者n不断除以2,m不断除以5,得到2*5的最大个数。


 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int INF=0x3f3f3f3f;
typedef long long LL;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		LL n,m;
		cin>>n>>m;
		LL ans=1;
		while(n%10==0) n/=10,ans*=10;
		while(n%5==0&&m>=2) 
		{
			n/=5;
			m/=2;
			ans*=10;
		}
		while(n%2==0&&m>=5) 
		{
			n/=2;
			m/=5;
			ans*=10;
		}
		while(m>=10)  m/=10,ans*=10;
		cout<<ans*n*m<<endl;
	}
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值