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; }
思考: 因为调用pow WA了一发, 自己写就好了啊, 别懒
posted on 2017-09-30 13:35 FriskyPuppy 阅读(166) 评论(0) 编辑 收藏 举报