当前位置:首页 > C++目录 > 正文内容

求阶乘的方法

亿万年的星光5年前 (2021-05-01)C++目录2273

1.普通求法

#include<iostream>
using namespace std;
int main(){
	int sum=1;
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		sum=sum*i;
	} 
	cout<<sum;
	return 0;
}

2.递归法

#include<iostream>
using namespace std;

int fact(int n){//定义阶乘函数
	if(n==1) return 1;//输入的参数是1,直接返回1
	else return n*fact(n-1);//递归算法
} 
int main(){
	 int x;
	 cin>>x;
	 x = fact(x);//调用函数返回int值
	 cout<<x;
	 return 0;
}

3.递推法

//使用递推思想,求解正整数的阶乘
//本算法的数学模型为 n! = (n - 1)! * n
 
#include <iostream>
using namespace std;
 
int fact(int n)
{
	int m[100];        //假设求100以内整数的阶乘 
	m[1] = 1;         //递推的起始值 
	for(int i = 2; i <= n; i++)
		m[i] = m[i - 1] * i;
	return m[n];      //返回递推的终值 
}
 
int main()
{
	int n;
	cin >> n;
	cout<< fact(n) <<endl;
	return 0;
}


4.高精度求法

#include<iostream>
#include<cstring>
using namespace std;
int a[100000];
int main()
{
    int n;
    int i,j;
 
    cin>>n;
    a[0]=1,a[1]=1;
    for(i=1;i<=n;i++)//高精乘
    {
        for(j=1;j<=a[0];j++)
            a[j]*=i;
        for(j=1;j<=a[0];j++)
        {
            a[j+1]+=a[j]/10;
            a[j]%=10;
        }
        if(a[j]>0)//进位处理
        {
            while(a[j]>10)
            {
                a[j+1]+=a[j]/10;
                a[j]%=10;
                j++;
            }
            a[0]=j;
        }
    }
    for(i=a[0];i>=1;i--)
        cout<<a[i];
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】围圈报数(约瑟夫问题)

【题解】围圈报数(约瑟夫问题)

【题目描述】有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个热呢又出列,... ,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,......

【算法】扩展欧几里得算法

一、欧几里得算法我们前面学过求最大公约数的算法:欧几里得算法(又叫辗转相除法) ,一般缩写是gcd,在C++中经常写成如下形式:int gcd(int a,int b)...

【题解】士兵训练

【题目描述】某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,...

CSP-J2021年普及组复赛T2——插入排序

CSP-J2021年普及组复赛T2——插入排序

【题目描述】插入排序是一种非常常见且简单的排序算法。小 Z 是一名大一的新生,今天 H 老 师刚刚在上课的时候讲了插入排序算法。 假设比较两个元素的时间为 O(1),则插入排序可以以 O(n 2...

C++小项目——实时钟表

C++小项目——实时钟表

0.前言在很多游戏中,我们要使用时间,这个时间一个是系统当前的时间,一个是服务器给你的时间。这篇文章我们尝试做一个模拟时钟。效果图如下1.任务分解1.首先我们尝试使用easyx来画一个。基本框架如下:...

数组的不确定长度输入

0.前言我们在学习数组的时候一般都会告诉你数组的长度,然后for循环去遍历。但是有一类问题是没有n的,也就是没有告诉长度的。1.方法第一种:(数组)#include<iostream>...