题目如下:

 
思路 or 题解:
我们先考虑如何操作使结尾有最多的 0
 我们不难发现:
2 * 5 = 10
10 = 10
我们是否只需要考虑 2 与 5 的贡献就行了
 答案是肯定的!!!
约定:
 
    
     
      
       
        c
       
       
        n
       
       
        
         t
        
        
         5
        
       
       
        因
       
       
        数
       
       
        5
       
       
        的
       
       
        个
       
       
        数
       
      
      
       cnt_5 因数 5 的个数
      
     
    cnt5因数5的个数
 
    
     
      
       
        c
       
       
        n
       
       
        
         t
        
        
         2
        
       
       
        因
       
       
        数
       
       
        2
       
       
        的
       
       
        个
       
       
        数
       
      
      
       cnt_2 因数 2 的个数
      
     
    cnt2因数2的个数
如果 
    
     
      
       
        c
       
       
        n
       
       
        
         t
        
        
         5
        
       
       
        >
       
       
        c
       
       
        n
       
       
        
         t
        
        
         2
        
       
      
      
       cnt_5 > cnt_2
      
     
    cnt5>cnt2 我们通过 2 去凑更多的 0,也就是 
    
     
      
       
        ×
       
       
        2
       
      
      
       \times 2
      
     
    ×2
 如果 
    
     
      
       
        c
       
       
        n
       
       
        
         t
        
        
         2
        
       
       
        >
       
       
        c
       
       
        n
       
       
        
         t
        
        
         5
        
       
      
      
       cnt_2 > cnt_5
      
     
    cnt2>cnt5 我们通过 5 去凑更多的 0,也就是 
    
     
      
       
        ×
       
       
        5
       
      
      
       \times 5
      
     
    ×5
最后 通过 10 去凑更多的 0,也就是 × 10 \times 10 ×10
我们再考虑如何 构造最大的数并且 后缀 0 的个数最多
 我们通过上面操作 可以使 
    
     
      
       
        n
       
       
        ×
       
       
        x
       
      
      
       n \times x
      
     
    n×x 成为后缀 0 个数最多 的一个合法数
 如何才可以取最大呢?
 
     
      
       
        
         k
        
        
         ×
        
        
         x
        
        
         ×
        
        
         n
        
        
          
        
        
         (
        
        
         k
        
        
         ≥
        
        
         1
        
        
         )
        
       
       
        k \times x \times n\ (k \ge 1)
       
      
     k×x×n (k≥1) 不会改变 后缀 0 个数
 就是 将 
    
     
      
       
        x
       
      
      
       x
      
     
    x 变大就行, 让 
    
     
      
       
        x
       
      
      
       x
      
     
    x 取得最大值
 
    
     
      
       
        
         x
        
        
         
          m
         
         
          a
         
         
          x
         
        
       
       
        =
       
       
        m
       
       
        /
       
       
        x
       
       
        ×
       
       
        x
       
      
      
       x_{max} = m / x \times x
      
     
    xmax=m/x×x
所以答案就是:
 
     
      
       
        
         n
        
        
         ∗
        
        
         m
        
        
         /
        
        
         x
        
        
         ×
        
        
         x
        
       
       
        n * m / x \times x
       
      
     n∗m/x×x
AC代码:
#define int long long
//#define ll long long
#define PII pair<int, int>
#define px first
#define py second
typedef std::mt19937  Random_mt19937;
Random_mt19937  rnd(time(0));
using namespace std;
const int mod = 1e9 + 7;
const int N = 100009;
int n, m;
void solve()
{
    cin >> n >> m;
    int cnt2 = 0, cnt5 = 0;
    int tt = n;
    while (tt % 2 == 0)
        cnt2++, tt /= 2;
    tt = n;
    while (tt % 5 == 0)
        cnt5++, tt /= 5;
    int x = 1;
    while (cnt5 > cnt2 && x * 2 <= m)
        cnt5--, x *= 2;
    while (cnt5 < cnt2 && x * 5 <= m)
        cnt2--, x *= 5;
    while (x * 10 <= m)
        x *= 10;
    cout << m / x * x * n << '\n';
}
signed main()
{
    buff;
    int _;
    cin >> _;
    while (_--)
        solve();
}   








![[附源码]java毕业设计水库水面漂浮物WEB系统](https://img-blog.csdnimg.cn/01e35e88043a482096f647ab85629ad9.png)










