「这是我参与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;
}