一个数的阶乘中的第一个数字

给定一个正整数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
喜欢就支持一下吧
点赞12 分享