2175. 【一命通关】之函数
1000ms
512MB
简单
一命通关系列
题目描述
欢迎来到"一命通关"系列第六关!本关考验你封装逻辑、编写函数的能力。
请根据要求实现以下五个函数,并在 main 函数中调用它们完成指定任务:
任务1:判断素数
编写函数 bool isPrime(int n)。如果 n 是素数返回 true,否则返回 false。
输入一个整数,输出 "Yes" 或 "No"。
任务2:求最大公约数 (GCD)
编写函数 int gcd(int a, int b)。使用辗转相除法(欧几里得算法)计算两个数的最大公约数。
输入两个整数,输出它们的 GCD。
任务3:交换变量值
编写函数 void swapValues(int &a, int &b)。注意使用引用传递,在函数内部交换两个变量的值。
输入两个整数,输出交换后的结果。
任务4:十进制转二进制
编写函数 string toBinary(int n)。将非负整数转换为二进制字符串并返回。
输入一个非负整数,输出其二进制表示。
任务5:递归求阶乘
编写函数 long long factorial(int n)。使用递归方式计算 n!。
输入一个正整数 n (n ≤ 20),输出其阶乘结果。
输入格式
共五行输入,分别对应五个任务的测试数据:
- 第一行:一个整数 n1(用于任务1)。
- 第二行:两个整数 a, b(用于任务2)。
- 第三行:两个整数 x, y(用于任务3)。
- 第四行:一个非负整数 m(用于任务4)。
- 第五行:一个正整数 k(用于任务5)。
输出格式
按照任务顺序输出五行结果:
- "Yes" 或 "No"
- 最大公约数
- 交换后的两个数(空格分隔)
- 二进制字符串
- 阶乘结果
样例 1
输入 (Input)
7 12 18 10 20 10 5
输出 (Output)
Yes 6 20 10 1010 120
- 素数判断:只需遍历到 √n 即可。注意处理 n < 2 的情况。
- 引用传递:在函数参数类型后加
&(如int &a),这样函数内对参数的修改会直接影响外部变量。 - 二进制转换:可以使用"除2取余法",将余数存入字符串或数组,最后反转。
- 递归终止条件:阶乘的递归基准情况是
if (n == 0 || n == 1) return 1;。 - 数据类型:阶乘增长很快,20! 已经接近
long long的上限,务必使用long long。
› 输入 stdin
CtrlShiftEnter
‹ 输出 stdout
错误 stderr
操作成功