蓝桥杯每日一练之阶乘计算

163 阅读2分钟

「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战

💛作者主页:静Yu

🧡简介:CSDN全栈优质创作者、华为云享专家、前端知识交流社区创建者

💛社区地址:bbs.csdn.net/forums/Jing…

第十三届蓝桥杯大赛个人赛省赛比赛将于2022年4月9日(星期六)举办,趁现在寒假的时间抓紧时间备战一下。因为博主本人报名是C/C++组,所以更新所有内容都是C/C++相关知识。题目全部都是蓝桥杯官网题库真题。今天是备战刷题的第十四天。

题目:

 输入一个正整数n,输出n!的值。
  其中n!=1*2*3*…*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

解题思路:

这道题目相对来说也是比较简单的,与昨天的序列求和解题思想是一样的,只不过一个是求和一个是求积。序列求和我们用的是for循环,今天用一种新的循环方式。今天用的是while循环进行判断,一开始是定义四个整数类型变量,a,b赋初值为1,n就是输入的数,num就是最后所求的阶乘。while的循环条件是b<n,每循环一次b的值就加一,a=a*b; b=b+1; num=a;也就是从1到n的阶乘,非常好理解。

完整代码:

#include<iostream>
using namespace std;
int main()
{
	int a,b,n,num;
	a=1;
	b=1;
	cin>>n;
	while(b<=n)
	{
		a=a*b;
		b=b+1;
		num=a;
	}
	cout<<num<<endl;
	return 0;
}