zoukankan      html  css  js  c++  java
  • Codeforces 858A. k-rounding 数论

    题目:

    题意:输入n和k,找到一个最小的数,满足末尾有至少k个0和是n的倍数。

    最小的情况 ans = n,最大的情况 ans = n*pow(10,k)。

    令 k = pow(10,k);

    我们发现所有可能的情况就是 ans = n*(k的因子)。

    把k的因子从小到大遍历一遍就可以了。

    代码:

    #include <bitsstdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main() {
        ll n,k;
        cin >> n >> k;
        k = (ll)pow(10,k);
        for(ll i = 1;i <= k; i++){
            if(k%i == 0 && n*i%k == 0){
                cout << n*i << endl;
                break;
            }
        }
        return 0;
    }

    我在网上看到的另一种方法,想法很不错:

    #include<bits/stdc++.h>  
    #define rep(i,a,b) for(int i=a;i<=b;i++)  
    #define dep(i,a,b) for(int i=a;i>=b;i--)  
    #define LL long long  
    using namespace std;  
      
    LL n,k,cnt5=0,cnt2=0;  
    int main()  
    {  
        cin>>n>>k;  
        while(n%5==0&&cnt5<k){n/=5;cnt5++;}  
        while(n%2==0&&cnt2<k){n/=2;cnt2++;}  
        rep(i,1,k)n*=10;  
        cout<<n<<endl;  
        return 0;  
    }  

    他的做法是把n的因数2和5除掉缩小成一个末尾没有0,且不具备乘以一个数让末尾变成0的数。

    然后在n的末尾补上k个0,这个n恰好是符合要求的值。

  • 相关阅读:
    鼠标经过显示边框
    特殊字符
    HTML 列表
    embed 引入网上视频
    锚点定位
    盒子阴影
    Map的四种遍历方式
    Glide的 java.lang.RuntimeException: Expected instanceof GlideModule, but found:X.GlideModule@2e4554f
    Java标识符的命名规则
    django入门与实践
  • 原文地址:https://www.cnblogs.com/zhangjiuding/p/7553020.html
Copyright © 2011-2022 走看看