给定数字n,编写代码以找到数字阶乘中的数字总和。给定n <= 5000
例子:
Input : 10
Output : 27
Input : 100
Output : 648
不能存储最大为100的数字!因此,在某些数据类型下,想法是将大量存储在向量中。
1) Create a vector to store factorial digits and
initialize it with 1.
2) One by one multiply numbers from 1 to n to
the vector. We use school mathematics for this
purpose.
3) Sum all the elements in vector and return the sum.
C++
// C++ program to find sum of digits in factorial
// of a number
#include
using namespace std;
// Function to multiply x with large number
// stored in vector v. Result is stored in v.
void multiply(vector &v, int x)
{
int carry = 0, res;
int size = v.size();
for (int i = 0 ; i < size ; i++)
{
// Calculate res + prev carry
int res = carry + v[i] * x;
// updation at ith position
v[i] = res % 10;
carry = res / 10;
}
while (carry != 0)
{
v.push_back(carry % 10);
carry /= 10;
}
}
// Returns sum of digits in n!
int findSumOfDigits(int n)
{
vector v; // create a vector of type int
v.push_back(1); // adds 1 to the end
// One by one multiply i to current vector
// and update the vector.
for (int i=1; i<=n; i++)
multiply(v, i);
// Find sum of digits in vector v[]
int sum = 0;
int size = v.size();
for (int i = 0 ; i < size ; i++)
sum += v[i];
return sum;
}
// Driver code
int main()
{
int n = 1000;
cout << findSumOfDigits(n);
return 0;
}
Java
// Java program to find sum of digits in factorial
// of a number
import java.util.*;
class GFG{
// Function to multiply x with large number
// stored in vector v. Result is stored in v.
static ArrayList v=new ArrayList();
static void multiply(int x)
{
int carry = 0;
int size = v.size();
for (int i = 0 ; i < size ; i++)
{
// Calculate res + prev carry
int res = carry + v.get(i) * x;
// updation at ith position
v.set(i,res % 10);
carry = res / 10;
}
while (carry != 0)
{
v.add(carry % 10);
carry /= 10;
}
}
// Returns sum of digits in n!
static int findSumOfDigits(int n)
{
v.add(1); // adds 1 to the end
// One by one multiply i to current vector
// and update the vector.
for (int i=1; i<=n; i++)
multiply(i);
// Find sum of digits in vector v[]
int sum = 0;
int size = v.size();
for (int i = 0 ; i < size ; i++)
sum += v.get(i);
return sum;
}
// Driver code
public static void main(String[] args)
{
int n = 1000;
System.out.println(findSumOfDigits(n));
}
}
// this code is contributed by mits
Python 3
# Python 3 program to find sum of digits
# in factorial of a number
# Function to multiply x with large number
# stored in vector v. Result is stored in v.
def multiply(v, x):
carry = 0
size = len(v)
for i in range(size):
# Calculate res + prev carry
res = carry + v[i] * x
# updation at ith position
v[i] = res % 10
carry = res // 10
while (carry != 0):
v.append(carry % 10)
carry //= 10
# Returns sum of digits in n!
def findSumOfDigits( n):
v = [] # create a vector of type int
v.append(1) # adds 1 to the end
# One by one multiply i to current
# vector and update the vector.
for i in range(1, n + 1):
multiply(v, i)
# Find sum of digits in vector v[]
sum = 0
size = len(v)
for i in range(size):
sum += v[i]
return sum
# Driver code
if __name__ == "__main__":
n = 1000
print(findSumOfDigits(n))
# This code is contributed by ita_c
C#
// C# program to find sum of digits in factorial
// of a number
using System;
using System.Collections;
class GFG{
// Function to multiply x with large number
// stored in vector v. Result is stored in v.
static ArrayList v=new ArrayList();
static void multiply(int x)
{
int carry = 0;
int size = v.Count;
for (int i = 0 ; i < size ; i++)
{
// Calculate res + prev carry
int res = carry + (int)v[i] * x;
// updation at ith position
v[i] = res % 10;
carry = res / 10;
}
while (carry != 0)
{
v.Add(carry % 10);
carry /= 10;
}
}
// Returns sum of digits in n!
static int findSumOfDigits(int n)
{
v.Add(1); // adds 1 to the end
// One by one multiply i to current vector
// and update the vector.
for (int i=1; i<=n; i++)
multiply(i);
// Find sum of digits in vector v[]
int sum = 0;
int size = v.Count;
for (int i = 0 ; i < size ; i++)
sum += (int)v[i];
return sum;
}
// Driver code
static void Main()
{
int n = 1000;
Console.WriteLine(findSumOfDigits(n));
}
}
// this code is contributed by mits
PHP
输出:
10539