N!(高精度)

问题描述:

Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
 

    input:

One N in one line, process to the end of file.

    output:

For each N, output N! in one line.

问题分析:这道题典型的是一道大数模板的应用。建立两个数组a[i],b[j],数组的每一个元素保存一个四位数,升位用一个变量up表示。结果先表示为一个临时变量,最后保存到res[i+j]数组中。

计算公式如下:

temp= a[i]*b[j]+res[i+j]+up;

AC代码:

// N!
#include<iostream>
using namespace std;
#include <cstring>
#define N 10003
int main()
{
	ios::sync_with_stdio(false);
	int n;
	int a[N];
	//len1表示位数 
	int i,j,up,len1;
	
	while(cin>>n){
		len1 = 0;
		a[0] = 1;
		for(i = 1;i <= n;i++){
			up = 0;
			for(j = 0;j <= len1;j++){
				a[j] = a[j]*i+up;
				up = a[j] / 10000; 
				a[j] %= 10000;
			}
			if(up > 0){
				len1++;
				a[len1] = up;
			}
		}
		cout<<a[len1];
		for(i = len1-1;i >= 0;i--){
			cout.width(4);
			cout.fill('0');
			cout<<a[i];
		}
		cout<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36711003/article/details/79604622