1. 程式人生 > >XJOI 3416 階乘末尾0 題解

XJOI 3416 階乘末尾0 題解

時間:1s 空間:256M

題目描述:

尋找一個最小的N,使得N!末尾恰好有Q個0

輸入格式:

輸入一個整數Q

輸出格式:

如果有解輸出一個整數N;否則輸出”impossible”

樣例輸入1:

2

樣例輸出1:

10

樣例輸入2:

5

樣例輸出2:

impossible

約定:

1<=Q<=10^18

提示:

此題仔細觀察,發現其實可以二分N,反過來驗證Q,就可以了。judge函式是算X!末尾有幾個0的,就是算因數5的個數,可以仔細體會一下。

#include <iostream>
#include <cstdio>
#include <cmath> #include <algorithm> #include <cstring> #include <string> #define L long long #define CON 10000000000000 using namespace std ; L Q , n ; L judge( L x ) { L w = 0 ; while ( x >= 5 ) { w += x / 5 ; x /= 5 ; } return w ; } int main ( ) { scanf
( "%lld" , & Q ) ; L l = 1 , r = CON , mid , mrzf ; while ( l < r ) { // cout<<l<<" "<<r<<endl; mrzf = 0 ; mid = ( l + r ) / 2 ; mrzf = judge ( mid ) ; if ( mrzf < Q ) l = mid + 1 ; else r = mid ; } mrzf = judge(r) ; if
( mrzf != Q ) printf ( "impossible" ) ; else printf ( "%lld" , r ) ; return 0 ; }

相關連結:

相關推薦

XJOI 3416 末尾0 題解

時間:1s 空間:256M 題目描述: 尋找一個最小的N,使得N!末尾恰好有Q個0 輸入格式: 輸入一個整數Q 輸出格式: 如果有解輸出一個整數N;否則輸出”impossible” 樣例輸入1: 2 樣例輸出1: 10

poj1401--Factorial--末尾0的個數

cnblogs sin factorial int amp div factor color sum Description   求出n!的末尾有多少個0(連續的)。   每組測試點有t個測試數據,輸入格式為第一行一個t,後面2~t+1行每行一個n,輸出其結果。 Sampl

light oj 1138 - Trailing Zeroes (III)(末尾0)

num stdio.h star adding 什麽 fin std sin each You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the tra

末尾 0 的個數.c

// 階乘尾數零的個數 // 100!的末尾有多少個0? /* 問題分析和演算法設計: 首先分析在100!結果值的末尾產生0的條件。不難看出:一個整數 若含有一個因子5則必然會在求100!時產生一個0。因此問題轉化為 求1到100這100個整數中包含了多少個因子5。若整數N

末尾0的個數(java)

末尾0的個數 題目描述 輸入一個正整數,求n!末尾有多少個0?比如n = 10; n! = 3628800 ,所以答案為2 輸入描述 輸入為一行,n (1 <= n <= 1000)//輸入量範圍限制不能用先求階乘的方法,會產生溢位

計算末尾0的個數

這個題目是程式設計之美上出現的,今年在幾個公司筆試的時候都出現了這個題目,之前一直以為 直接用 N  /  5 就是結果,昨天被土豆麵試的時候,才發現自己理解錯了,思路是這樣的,0 的個數就是 1,,2,...,n中n個數中能夠分解出5的因子的個數。之前以為 5,10,2

滴滴2017校園招聘程式設計題——末尾0的個數

1、題目如下圖所示: 2、分析:  這個題目描述的很簡單,思路看似也很清晰,我們第一想到的肯定就是正常計算和統計——先計算N!階乘的結果,然後統計結果末尾0的個數。看似這是一個很好的也很簡單的理想方

Java 演算法程式設計 N末尾0的個數問題

求一數N的階層 就是 1*2*3...*n   ,其實求這道題 就是求1到n 中一共可拆解出幾個5,因為2*5=10 ,有一個對5 和2  必然末尾有個0 ,又因為 5肯定比2少 ,所以就簡化成求5的

N的末尾有多少個0

log 多少 blog 計算 末尾 得出 因子 bsp 問題 題目:N的階乘末尾有多少個0 分析: 以100!為例,可以產生10的有:0 2 4 5 6 8 結尾的數字,顯然2是確定的,因為4、6、8當中都含有因子2,所以都可看當是2,那麽關鍵在於5的數量了那麽該問題的實質

(ACM數論)求N的末尾有多少個0

問題描述:給定一個整數N,那麼N的階乘N!末尾有多少個0? 這個問題的難點在於,不能直接計算出N!,因為會溢位。 既然不能直接計算,那就換個姿勢計算(手動滑稽) 首先,我們考慮到N!末尾0的個數和 N!有多少個因子10有關,而10 = 2 * 5 ,於是我

【數學規律】N的末尾有多少個0 ???

末尾0的個數就是指這個數總共有幾個10因子,而10又能表示成2和5的乘積。假設m=n!,那麼m中2的因子個數肯定大於5的因子個數,所以m中5的因子個數即是所要求結果; 顯然n除以5可得到1~n中包含有一個因子5的個數,但是,1~n中有的數可以被5整除好幾次,所以必須將這個數

後面0的數量

isp ios std cout ret view lose include 分享 #include <bits/stdc++.h> #define _xx ios_base::sync_with_stdio(0);cin.tie(0); using nam

51Nod 1003 後面0的數量 | 思維

efi blog png ima mage amp pre strong main 題意:n的階乘後面0的個數,如果直接算出階乘再數0的數量一定會超時的。 因為10=2*5,所以求出5貢獻的次數就行。 #include "bits/stdc++.h" usi

求一個數的0的個數

求一個數的階乘中0的個數 連續幾天產出為負,再不寫點東西沒法交代了。。。 public class The_number_of_0_in_FactorialN { public static void main(String[] args) { int n=5; Syst

51nod1003後邊0的數量

題目描述  連結戳這裡 解法: 《程式設計之美》書裡有講 N!能產生0的質數組合只能是2 * 5,也就是說當對N!進行質數分解之後 N!末尾 0 的個數取決於從 1 到 n 的各個數的因子中 2 和 5 的個數的較小的那個,但又因為能被2整除的數出現的頻率比能被5整除

1003 後面0的數量(51nod) 解題報告

基準時間限制:1 秒 空間限制:131072 KB 分值: 5 難度:1級演算法題  收藏  關注 n的階乘後面有多少個0? 6的階乘 = 1*2*3*4*5*6 = 720,720後面有1

javaSE (三十四)File類和遞迴練習(統計資料夾大小、拷貝資料夾、層級列印資料夾、斐波拉契數列、獲取1000全部0和尾部0數目、約瑟夫環)

1、統計資料夾大小: 思路: 套用之前已經做過的,鍵入一個路徑,若有效則封裝成File類 初始化計數器len, 若資料夾下是檔案,則記錄檔案.length() 若資料夾下是資料夾,遞迴 輸出len 注:遞迴也可以刪除資料夾,但是一定要先刪除裡

51nod 1003 後面0的數量

n的階乘後面有多少個0? 6的階乘 = 1*2*3*4*5*6 = 720,720後面有1個0。 Input 一個數N(1 <= N <= 10^9) Output 輸出0的數量 Input示例 5 Output示例 1 題解:一個數n的階乘後

[LeetCode] Factorial Trailing Zeroes 求末尾零的個數

Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in logarithmic time complexity. Credits:Special thanks to

[CareerCup] 17.3 Factorial Trailing Zeros 求末尾零的個數

解法一: int trailing_zeros(int n) { int res = 0; while (n) { res += n / 5; n /= 5; } return res; } 解法二: