Codeforces 858A. k-rounding 数论
生活随笔
收集整理的這篇文章主要介紹了
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 <bits\stdc++.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恰好是符合要求的值。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Codeforces 858A. k-rounding 数论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于逆元的概念、用途和可行性的思考(附5
- 下一篇: 【模板】二分查找