日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XidianOJ 1019 自然数的秘密

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XidianOJ 1019 自然数的秘密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

題意: 已知:N!=N*(N-1)*...*2*1 找到最小自然數 N, 使N!末尾有連續 M個零. 例如, 5! 的結尾包含1個零.

輸入

第一行輸入一個整數T,表示有T組測試數據。 對于每組測試數據,輸入一個整數M,表示包含M個零。(0<=M<=10^8)

輸出

每組數據,輸出一行滿足條件的最小自然數N。 如果無解,輸出“No solution”。(不含引號)

--

正文

對于n!,可以算出他末尾的0

10!
零的個數可以由這樣算出
10/5=2
2/5=0
0的個數就是2+0=2,再來個例子,2008
2008/5=401
401/5=80
80/5=16
16/5=3
0的個數就是401+80+16+3=500個零

在一個肯定ok的范圍內二分找就好

#include <cstdio> #include <iostream> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std;typedef long long LL; #define MAXN 500000000 LL f(LL n){LL res = 0;while (n >= 5) {n /= 5;res += n;}return res; }LL findm(LL left,LL right,LL m){ // printf("%lld %lld\n",left,right);if (left == right){if (f(left) != m)return 0;else return left;}if (left == right - 1){if (f(left) != m){if (f(right) != m){return 0;}else return right;}else return left;}LL mid = (left+right)/2;LL fmid = f(mid);if ( m > fmid ){return findm(mid,right,m);} elsereturn findm(left,mid,m); }int main(){int time,T;scanf("%d",&T);for (time=1;time<=T;time++){LL m;scanf("%lld",&m);LL res = findm(1,MAXN,m);if (res == 0){printf("No solution\n");}else printf("%lld\n",res);}return 0; }

?

轉載于:https://www.cnblogs.com/ToTOrz/p/6106471.html

總結

以上是生活随笔為你收集整理的XidianOJ 1019 自然数的秘密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。