给定正整数n,请找到其阶乘中的第一个数字。
例子 :
Input : n = 5
Output : 1
Factorial of 5 is 120 and first
digit is 1.
Input : 1000
Output : 4
一个简单的解决方案是计算数字的阶乘,然后在其中找到第一个数字。
上述解决方案很快就会导致溢出。更好的解决方案是使用阶乘包含尾随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
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
= 10)
$fact = $fact / 10;
return floor($fact);
}
// Driver Code
$n = 5;
echo firstDigit($n);
// This code is contributed by aj_36.
?>
Javascript
输出 :
1
上面的代码对于稍高的值也失败。最好的主意似乎是找到大数的阶乘,然后找到第一个数字。