给定一个正整数n,求其阶乘中的第一个数字。
null
例如:
Input : n = 5Output : 1Factorial of 5 is 120 and firstdigit is 1.Input : 1000Output : 4
A. 简单解决方案 就是计算数字的阶乘,然后找到其中的第一个数字。 上述解决方案导致 溢流 很快更好的解决方案是利用以下事实: 阶乘包含尾随的0 删除尾随的0不会改变第一个数字。例如,对于x>0和y>0,x*y的第一位数字与x*y*100相同。
C++
// A C++ program for finding the First digit // of the large factorial number #include <bits/stdc++.h> using namespace std; int firstDigit( int n) { long long int fact = 1; for ( int i = 2; i <= n; i++) { fact = fact * i; // Removing trailing 0s as this // does not change first digit. while (fact % 10 == 0) fact = fact / 10; } // loop for divide the fact until it // become the single digit and return // the fact while (fact >= 10) fact = fact / 10; return fact; } // derive main int main() { int n = 5; cout << firstDigit(n); return 0; } |
JAVA
// A Java program for finding the First digit // of the large factorial number class GFG{ static int firstDigit( int n) { int fact = 1 ; for ( int i = 2 ; i <= n; i++) { fact = fact * i; // Removing trailing 0s as this // does not change first digit. while (fact % 10 == 0 ) fact = fact / 10 ; } // loop for divide the fact until it // become the single digit and return // the fact while (fact >= 10 ) fact = fact / 10 ; return fact; } // derive main public static void main(String[] args) { int n = 5 ; System.out.println(firstDigit(n)); } } //This code is contributed by Smitha Dinesh Semwal |
Python3
# Python3 program for finding # the First digit of the # large factorial number import math def firstDigit(n) : fact = 1 for i in range ( 2 , n + 1 ) : fact = fact * i # Removing trailing 0s # as this does not # change first digit. while (fact % 10 = = 0 ) : fact = int (fact / 10 ) # loop for divide the fact # until it become the single # digit and return the fact while (fact > = 10 ) : fact = int (fact / 10 ) return math.floor(fact) # Driver Code n = 5 print (firstDigit(n)) # This code is contributed by # Manish Shaw(manishshaw1) |
C#
// A C# program for finding the First digit // of the large factorial number using System; class GFG { static int firstDigit( int n) { int fact = 1; for ( int i = 2; i <= n; i++) { fact = fact * i; // Removing trailing 0s as this // does not change first digit. while (fact % 10 == 0) fact = fact / 10; } // loop for divide the fact until // it become the single digit and // return the fact while (fact >= 10) fact = fact / 10; return fact; } // driver function public static void Main() { int n = 5; Console.Write(firstDigit(n)); } } // This code is contributed by parashar. |
PHP
<?php // PHP program for finding // the First digit of the // large factorial number function firstDigit( $n ) { $fact = 1; for ( $i = 2; $i <= $n ; $i ++) { $fact = $fact * $i ; // Removing trailing 0s as this // does not change first digit. while ( $fact % 10 == 0) $fact = $fact / 10; } // loop for divide the fact // until it become the single // digit and return the fact while ( $fact >= 10) $fact = $fact / 10; return floor ( $fact ); } // Driver Code $n = 5; echo firstDigit( $n ); // This code is contributed by aj_36. ?> |
Javascript
<script> // JavaScript program for finding the // First digit of the large factorial number function firstDigit(n) { let fact = 1; for (let i = 2; i <= n; i++) { fact = fact * i; // Removing trailing 0s as this // does not change first digit. while (fact % 10 == 0) fact = fact / 10; } // Loop for divide the fact until it // become the single digit and return // the fact while (fact >= 10) fact = fact / 10; return (Math.round(fact)); } // Driver code let n = 5; document.write(firstDigit(n)); // This code is contributed by splevel62 </script> |
输出:
1
对于稍高的值,上述代码也会失败。最好的办法似乎是 求大数的阶乘 然后找到第一个数字。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END