阶乘计算 (多种方法汇集)输入一个正整数n,输出......

阶乘计算 输入一个正整数n,输出n!的值。其中n!=123*…*n。(多种方法汇集)

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

输入一个正整数n,输出n!的值。
  其中n!=123*…*n。

算法描述

n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。

输入格式

输入包含一个正整数n,n<=1000。

输出格式

输出n!的准确值。

样例输入
10

样例输出
3628800

方法一

#include
using namespace std;
void f(int n)
{
    if(n==1)
    cout<<"1";
    else
    {
        int a[100000],tail=0,head=0,p=0;
        a[0]=1;
        for(int i=2;i<=n;i++){
        for(int j=head;j<=tail;j++)
        {
            p=a[j]*i+p;
            a[j]=p%10;
            p=p/10;
        }
        while(p!=0)
        {
            tail++;
            a[tail]=p%10;
            p=p/10;
        }
      }
      for(int i=tail;i>=0;i--)
      cout<<a[i];
    }
}
int main()
{
    int n;
    cin>>n;
    f(n);
    return 0;
}

方法二

#include 
#include 
#define MAX 10000
int main()
{
 int n,a[MAX],i,j,s,r=0;
 scanf("%d",&n);
 memset(a,0,sizeof(a));
 a[0]=1;
 for(i=2;i<=n;i++)
 {
  for(j=0;j<MAX;j++)
  {
   s=a[j]*i+r;
   r=s/10;
   a[j]=s%10;
  }
 }
 for(i=MAX-1;i>=0;i--)
 {
  if(a[i])
   break;
 }
 for(j=i;j>=0;j--)
   printf("%d",a[j]);
 return 0;
}

方法三

#include  
#include
using namespace std;
vector<int> v;
int main(){
    int n;
    cin>>n;
    v.push_back(1);//数组初始化为1
    for(int i=2;i<=n;i++){
        for(int j=0;j<v.size();j++){
            v[j]*=i;
        }//完成图解的步骤一
        for(int j=0;j<v.size();j++){
            if(v[j]<10)continue;
            else{
                int temp=v[j];//临时值temp保存
                v[j]%=10;
                if(j!=v.size()-1){//判断是否为最高位
                    v[j+1]+=(temp/10);
                }else{
                    v.push_back(temp/10);
                }
            }
        }//完成图解步骤二
    }
    //倒序输出
    for(int i=v.size()-1;i>=0;i--){
        cout<<v[i];
    }
   
    return 0;
}

图解高精度算法原文链接:https://blog.csdn.net/weixin_43723614/article/details/105060144

收集不同思路代码,扩展丰富思维,方便学习

你可能感兴趣的:(数据与算法,c++,算法,哈希算法,图搜索算法)