末尾のゼロ

トピック:

末尾のゼロ 

あなたのタスクは、最小の自然数を見つけることです  Nをするように、  N! 正確に含まれている  Qの  10進数で歩道上のゼロを。あなたが知っているように  Nを!= 1 * 2 * ... * N例えば、5!= 120、120は、歩道上に1つのゼロを含んでいます。

入力

入力は整数で始まり  T(10000以下)示す、  テストケースの数。

各ケースは、整数含ま  Q(1つの≤Q≤10 8  ラインです。

出力

各場合について、ケース番号と印刷  Nを解決策が見つからない場合は、印刷する  「不可能」

サンプル入力

3

1

2

5

サンプル出力

ケース1:5

ケース2:10

ケース3:不可能

ソリューション:

これは、nの主なアイデアの定義を求めて、古典的な二分法の質問です!2つの番号0の関数の後。

Nシーク!番号の後ろに0、CSDNのブログで私の記事を参照してください。https://blog.csdn.net/qq_45328552/article/details/98206579

私は、コード内の二分法を分析します。

書式#include <iostreamの> 使用して名前空間はstdを、
typedefの長い長いLL。INT 検索(LLのN)
{ int型の和= 0 一方、(N)
    { 
        合計 + = N / 5 
        N / = 5 
    } 戻り値の和。
} int型のmain()
{ //     freopenは( "INPUT.TXT"、 "R"、STDIN)。    // !注释注释!!! int型T、N。
    cinを >> トン。以下のためのint型私は=

 
 


    
    
    
    
    



    
    
    
    
    。1 ; I <= T; I ++は
    { 
        CIN >> N-; 
        
        LLヘッド = 0、= 5E8 +尾5。、MID; 
         // 2点頭部と尾部との中間を規定する、タイプとして定義は長い長い述べ、その二点ため一般的に、非常に多数の必要とされる
        しばらく(ヘッド<=尾)// 条件が半周期を満たす必要がある、ヘッドの端部はより少ない
        { 
            MID =(頭+尾)/ 2 ;   
            
            IFヘッド(検索(MID)<n-は)= MID + 1。 ; // 。検索(ミッド)がn未満である場合、値は右を見つけなければならない、と半ば半ば番号を左に満たされていないので、最初に等しいを聞かせて1 +中旬
            他の IF(検索(ミッド)> N-)ミッド尾= - 1 ; //検索(MID)がnより大きい場合、値は左され、右の中間中間要件を満たし、従ってので尾に等しくない1-MID。
             BREAK ; //は、それが値見て決定されているので、ループの外に等しいです
        } 
        
        IF(ヘッド>尾)のprintf(" ケース%のD:インポッシブル\ N- "、I); // ヘッド>尾完全に記載されているバイナリ数も一致する出力されませんfalseに
        のprintf(" ケースDの%:% D \のN- "、I、MID - MIDの%5);     // 上記のコードでは、これが検索(MID)= nで修飾されていることを知ることができ、出力することができる 
    }     // 中間中間出力理由5%です同じ番号の後ろ6,7,8最小数0~5階乗の階乗は、番号0を繰り返し、本明細書に記載される条件を満たして6,7,8 6,7,8%を差し引く、同じです図5は、それが条件満たす最小値となる                         
    戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/pioneer1/p/11290936.html