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; } 解法二: