在Berlandia发生了通货膨胀,所以商店需要改变商品的价格。
商品n的当前价格已经给出。允许将该商品的价格提高k倍,1≤k≤m,k为整数。输出商品的最圆的可能的新价格。也就是在最后有最大数量的零的那个。
例如,数字481000比数字1000010更圆(481000的末尾有三个零,而1000010的末尾只有一个零)。
如果有几个可能的变体,输出新价格最大的那个。
如果不可能得到一个更圆的价格,则输出n⋅m(即可能的最大价格)。
输入
第一行包含一个整数t(1≤t≤104)--测试中测试用例的数量。
每个测试用例由一行组成。
这一行包含两个整数:n和m(1≤n,m≤109)。其中n是商品的旧价格,数字m意味着你可以增加价格n不超过m倍。
输出
对于每个测试案例,在单独的一行中输出形式为n⋅k(1≤k≤m,k-一个整数)的最圆整数。
如果有几个可能的变体,则输出新价格(值n⋅k)最大的那一个。
如果不可能得到一个更圆的价格,则输出n⋅m(即可能的最大价格)。
例子
输入
10
6 11
5 43
13 5
4 16
10050 12345
2 6
4 30
25 10
2 81
1 7
输出
60
200
65
60
120600000
10
100
200
100
7
备注
在第一种情况下n=6,m=11。我们不能得到一个末尾有两个零或更多的数字,因为我们需要将价格提高50倍,但50>m=11。10的最大价格倍数将是6⋅10=60。在第二种情况下,n=5,m=43。100的最大价格倍数将是5⋅40=200。
在第三种情况下,n=13,m=5。所有可能的新价格都不会以0结尾,那么你应该输出n⋅m=65。
在第四种情况下,你应该将价格提高15倍。
在第五种情况下,将价格提高12000倍。
首先 , 产生末尾 0 必定为质因子 2,5 所形成 。
所以 ,对 n 先进行因式分解 , 求出其 2 的因子个数 和 5 的因子个数 。
然后考虑 k , 首先可能的运用 n 中的 和2和5 。
剩余 k 的空间则考虑末尾尽可能多的 0
判断 n中几个2 几个5 2*5=10 内部自己消化 多出来2 或 5 让 m来解决 之后在对m%10
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
int t;cin>>t;
while(t--)
{
ll n,m;cin>>n>>m;
ll y=1;
while(n&&n%10==0)
{
n/=10;
y*=10;
}
while(n%2==0&&m>=5)
{
n/=2;
m/=5;
y*=10;
}
while(n%5==0&&m>=2)
{
n/=5;
m/=2;
y*=10;
}
while(m>=10)
{
m/=10;
y*=10;
}
y*=n*m;
cout<<y<<endl;
}
return 0;
}