乗算問題解決の羅区P2388の階乗

このこんにゃくは再びQwQ説明をしました。

このトピック、あなたは暴力を作るこんにゃくを書きたい最初のものを参照してください。

ああ、悪い習慣。

しかし、半分の脳を持つあなたは、普通の暴力がオーバーすることはできません知っていると思います。

しかし、こんにゃくとして、私は、高度な数学的手法を最適化するために何を考えることができませんでした。

まあ、トピックに戻ります

題さが乗るの終わりに、これは疲れを見つけるために私たちを尋ねた「0」

それは乗算ので、「0」「0」来る乗じて「2」ずつと「5」である必要があり、次いで、特に特別な番号です。

また、「0」の数が「2」及び「5」の間でなければならない数の少ない数。

そして、我々はまた、その階乗乗法を求めています

したがって、番号「5」は「2」の数よりも小さくなければなりません

そして、「0」の数が5 『の数は』

これは、よく書かれ、

。私たちは、この質問を書き込むための十分な時間を持って、あなたは100ポイントオフ100ミリ秒を実行し、1msのも100ポイントを持っていたPS;その後、私たちはより速く、より高度な方法の追求に盲目であるべきではない、はずですより効果的な練習が(消さ;しかし、私はそれについて考えるために多くの時間がかかることができると思い、あなたがワークアウトの思考を行使することができます。

これは、ビューの唯一の個人的なポイントを表します。

良い、幸せな時間コード:

#include<bits/stdc++.h>
using namespace std; #define int long long//不开long long见祖先 int n, now, num, ans;//num是这一轮的‘0’的个数,ans是总答案; signed main() { scanf("%lld", &n);//输入 for(int i = 1; i <= n; ++ i)//累乘,依次枚举 { now = i;//因为要不断除5,所以不可以直接用i; while(now % 5 == 0)//找‘5’ { ++ num;//加一个 now /= 5;//除上5 } ans += num;//相加 //注意:num不需要赋值为0,也不可以 //因为它的累乘包含了它的前面的点, //所以如果num赋值为0后就会导致错误 } printf("%lld", ans);//输出,再次强调一定要开long long return 0; }

おすすめ

転載: www.cnblogs.com/Flash-plus/p/11210698.html