14.求10000以内n的阶乘!(noi题库1.6)

描述

求10000以内n的阶乘。

输入只有一行输入,整数n(0<=n<=10000)。输出

一行,即n!的值。

方法一:

#include<iostream>
using namespace std;
int ans[100000000],jinwei,chengji;
int main()
{
    int k=1,n;
    cin>>n;
    ans[1]=1;
    for(int i=1;i<=n;i++)//枚举因式中的每一个因子 
    {
        jinwei=0;
        for(int j=1;j<=k;j++)
        {
            chengji=ans[j]*i+jinwei;
            jinwei=chengji/10;
            ans[j]=chengji%10;
        }
        while(jinwei)
        {
            ans[++k]=jinwei%10;
            jinwei/=10;
        }
    }
    for(int i=k;i>=1;i--)
    {
        cout<<ans[i];
    }
}

方法二:

   方法一中定义数组太大,可以让a[0]存储位数

#include<stdio.h>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=50000;
int a[MAXN]={1,1},n,i,j,k,c;
int main()
{
   cin>>n;
   k=a[0];
   for(i=1;i<=n;i++)
   {
   	  for(j=1;j<=k;j++)
   	     a[j]=a[j]*i;
   	  for(j=1;j<=k-1;j++)
   	     if(a[j]>=10)
   	     {
   	        a[j+1]+=a[j]/10;
			a[j]=a[j]%10;	
		 }
	   while(a[k]>=10)
	   {
	   	     c=a[k]/10;
	   	     a[k]=a[k]%10;
			 a[++k]=c;	 
	   }
   }
   for(int i=k;i>=1;i--) cout<<a[i];
   return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_23215733/article/details/80954735
今日推荐