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

求阶乘的方法

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

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;
}


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

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

分享给朋友:

相关文章

【数论】快速乘

【数论】快速乘

上一篇文章简单说了龟速乘的问题,有人觉得龟速乘还是太慢了,有没有什么办法再快一点,实际是有的,就是我们今天介绍的 快速乘。快速乘的原理和龟速乘不同,快速乘并不是基于二进制和位运算,严格来说,快速乘是利...

CSP-J2021年普及组复赛T3——网络连接

【题目描述】TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个 协议,还原一个简化后的网络连接场景。在本问题中,计算机分为两大类:服务机(Server)和客户机(Clie...

C++链表结构——单链表

0.前言存储方式分为顺序存储结构和链式存储结构。顺序存储结构的优缺点:优点:可以通过一个简单的公式随机存取表中的任一元素,逻辑关系上相邻的两个元素在物理位置上也是相邻的,且很容易找到前驱跟后继元素。缺...

CSP-J2021年普及组复赛T4——小熊的果篮

【题目描述】    小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依 次用正整数 1、2、3、……、n 编号。连续排在一起的同一种...

C++中的宏

一、预处理和编译器    首先,预编译器就是在编译器之前运行,换句话说,预编译器根据程序员的指示,决定实际要编译的内容。预编译器编译指令都以 # 开头。例如:1...

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

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

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