Codeforces 861 A k-rounding 数论

  题目链接: http://codeforces.com/contest/861/problem/A

  题目描述: 给你一个n, 一个k, 让你求n的所有倍数至少以k个0结尾的那个数

  解题思路: 质因数分解出2, 5,  如果min(cnt2, cnt5) >= k, 直接输出, 剩下少的补全就可以了

  代码: 

#include <iostream>
#include <cstdio>
#include <map>
#include <iterator>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;

typedef long long ll;

ll f(ll a, ll b) {
    ll ret = 1;
    for( ll i = 1; i <= b; i++ ) {
        ret *= a;
    }
    return ret;
}
int main() {
    int n, k;
    cin >> n >> k;
    int temp = n;
    int cnt2 = 0;
    int cnt5 = 0;
//    cout << f(2,3) << endl;
    while(n%2==0) {
        cnt2++;
        n /= 2;
    }
    while(n%5==0) {
        cnt5++;
        n /= 5;
    }
//    cout << cnt2 << " " << cnt5 << endl;
    if( min(cnt2, cnt5) >= k ) {
        cout << temp << endl;
    }
    else {
        ll ans = temp;
        if(cnt2 < k) ans *= f(2,ll(k-cnt2));
        if(cnt5 < k) ans *= f(5,ll(k-cnt5));
        cout << ans << endl;
    }
    return 0;
}
View Code

  思考: 因为调用pow WA了一发, 自己写就好了啊, 别懒

posted on 2017-09-30 13:35  FriskyPuppy  阅读(166)  评论(0编辑  收藏  举报

导航