题目链接: 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了一发, 自己写就好了啊, 别懒