二级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++二级练习 luogu-B3764, 计算阶乘
📅 2025-01-09·✍️ OneCoder·计算中...·⏱️ 5 分钟
#GESP#C++#多重循环
GESP二级练习,多层循环和分支嵌套练习,难度★✮☆☆☆。
luogu-B3764 计算阶乘
题目要求
题目描述
相信你已经知道阶乘的定义:
现在,我们给出双阶乘的定义:
当 为奇数时,
当 为偶数时,
特别的,。
例如,,。
给定整数 ,请你求出 的值。
输入格式
本题单测试点内有多组测试数据。
输入的第一行是一个整数,表示数据组数 。接下来依次给出每组数据的输入信息。
对每组数据,输入只有一行一个整数表示给定的 。
输出格式
对每组数据,输出一行一个整数表示 的值。
样例输入 #1
CONSOLE
2 行
1
2
样例输出 #1
CONSOLE
1 行
2
样例输入 #2
CONSOLE
2 行
1
3
样例输出 #2
CONSOLE
1 行
4
数据规模与约定
- 对 的数据,。
- 对 的数据,。
- 对 的数据,,。
提示:
。
题目分析
- 为了计算 ,我们首先需要输入测试用例的数量 和每个测试用例的输入数 。
- 然后,对于每个 ,根据 的奇偶性,按照不同的规则进行计算。
- 注意到:根据定义,实际上可以进行化简。
- 对于奇数
- 对于偶数
如此,在可能保证过程中的计算结果在
unsigned long long可表示的数据范围内。
示例代码
C++
21 行
#include <iostream>
using namespace std;
int main() {
int t, n; // t为测试用例的数量,n为每个测试用例的输入数
cin >> t; // 输入测试用例的数量
for (int i = 0; i < t; i++) { // 遍历每个测试用例
cin >> n; // 输入当前测试用例的数
unsigned long long result = 1; // 初始化结果为1
if (n & 1) { // 如果n是奇数
for (int i = 2; i <= n; i += 2) { // 从2开始,每次增加2,直到n
result *= i; // 将当前数乘入结果
}
} else { // 如果n是偶数
for (int i = 1; i <= n; i += 2) { // 从1开始,每次增加2,直到n
result *= i; // 将当前数乘入结果
}
}
cout << result * 2 << endl; // 输出结果乘以2
}
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
读者讨论与留言
💬 还没有读者留言,快来成为第一个讨论者吧!