当前位置:首页 > C++知识 > 正文内容

求阶乘的方法

亿万年的星光4年前 (2021-05-01)C++知识1719

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


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

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

分享给朋友:

相关文章

【C++图形化编程】鼠标函数及鼠标画板

【C++图形化编程】鼠标函数及鼠标画板

0.前言这篇文章简单介绍一下利用鼠标画图的程序#include<graphics.h> #include<conio.h> int main(){ initg...

C++将数据写入磁盘文件

0.前言要求:在任意路径下新建一个文本文档,向该文档中写入数据。以'#'结束字符串的输入。关键技术:ch=fputc(ch,fp);该函数的作用是把一个字符写到磁盘文件(fp所指的磁盘...

组合数的写法

前面我们写过 全排列和排列数 等。这篇文章。我们写一下组合数。例题:从n个数中,选出m个,一共有多少种不同的选法?这是一道典型的组合数公式。我们直接用dfs公式肯定会出现重复的。#include<...

【数据结构】优先队列(1)

优先队列(Priority Queue)是一种特殊的队列,它 不遵循“先进先出”(FIFO) 的原则,而是 按照优先级(Priority) 来出队。优先级高的元素 先出队,优先级低的元素 后出队。1....

DEVC++中的断点调试

DEVC++中的断点调试

1.调试程序的两种方法编程的时候经常会遇到自己的输出结果跟标准结果或者预期的结果不一样,这个时候就要用到调试程序的功能。调试程序的目的有两个,一个是找出程序中的错误,另一个是监视变量的变化。2.DEV...

【数据结构】并查集2

【数据结构】并查集2

上一篇文章,简单介绍了并查集。这篇文章,介绍一下并查集的改进以及优化。find函数的优化(路径压缩)因为并查集的merge操作:void merge(int a, int...