Large number operations-factorial

Topic description:
Calculate the factorial of the input number n

Algorithm idea:
Insert picture description here

  1. Array length calculation: double s =log2+…logn, m = (int)s + 1
	for(int i=2;i<=n;i++)
		s += log10(i);
	m = (int)s+1;
  1. Initialization: Assign a[1] = 1 and the remaining values ​​are 0
	for(int k=1;k<=m;k++)
		a[k]=0;
	a[1] = 1;				// 个位为1 
  1. Large number calculation: abc d=(a+b+c) d=a d+b d+c*d
	for(int i=2;i<=n;i++)
		for(int j=1;j<=m;j++){
    
    
			int t = a[j]*i + carry;
			a[j] = t % 10;
			carry = t/10;
		}

Complete code:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const int N = 1e5;
int a[N],n,carry,m;
double s;

int main(){
    
    
	cin>>n;					
	// 计算长度 
	for(int i=2;i<=n;i++)
		s += log10(i);
	m = (int)s+1;
	// 初始化 
	for(int k=1;k<=m;k++)
		a[k]=0;
	a[1] = 1;				
	// 开始计算
	for(int i=2;i<=n;i++)
		for(int j=1;j<=m;j++){
    
    
			int t = a[j]*i + carry;
			a[j] = t % 10;
			carry = t/10;
		}
	printf("m=%d\n",m);
	printf("%d!=",n);
	for(int i=m;i>=1;i--)
		cout<<a[i];
	cout<<endl;
	return 0; 
}

Guess you like

Origin blog.csdn.net/weixin_45666249/article/details/114283536