口算练习
GESP二级练习,多重分支嵌套/数学函数,难度★✮☆☆☆。
luogu-B3658 [语言月赛202209] 口算练习
题目要求
题目描述
在课堂上,同学们经常需要进行口算练习。
老师出了一道练习题:计算 的值,请你问答这个问题。
其中 代表不超过 的最大整数,如 。
提示:
在 C++ 中,int 类型变量 x, y,语句
x/y
计算得到的是 向零取整的值。例如:int x = -3, y = 2; cout << x / y;
上面的代码会输出 -1。
floor
函数,其功能是“向下取整”,比如:floor(-1.5) = -2.0
输入格式
输入共一行两个整数 ,保证 。
输出格式
输出一行一个整数,代表 。
样例输入 #1
2 1
样例输出 #1
2
样例输入 #2
-3 2
样例输出 #2
-2
数据范围
对于 的数据,;
对于另外 的数据,保证 ;
对于另外 的数据,保证 ;
对于 的数据,。
题目分析
为了向下取整
- (1)我们可以直接使用floor函数即可;
- (2)如果手动计算:我们需要计算 除以 的结果,并将结果转换为整数。具体来说,如果结果为正数,我们直接取整数部分;如果结果为负数,我们需要判断 是否能被 整除,如果能,则直接取整数部分;如果不能,则需要向下取整,例如 向下取整为 。(可以先变为正数,然后强转为int然后+1,再变为负数)
{% include custom/custom-post-content-inner.html %}
示例代码
代码一:使用floor函数
#include <cmath>
#include <iostream>
using namespace std;
int main() {
int x, y; // 定义两个整数变量x和y
cin >> x >> y; // 从输入流中读取x和y的值
double ans = (double)x / (double)y; // 计算x除以y的结果,并将结果转换为浮点数
cout << floor(ans); // 输出结果的整数部分
return 0; // 返回0,表示程序执行成功
}
代码二:手动实现向零取整
#include <cmath>
#include <iostream>
using namespace std;
int main() {
int x, y; // 定义两个整数变量x和y
cin >> x >> y; // 从输入流中读取x和y的值
double temp = (double)x / y; // 计算x除以y的结果,并将结果转换为浮点数
int result; // 定义整数变量result
if (temp >= 0) {
result = (int)temp; // 如果结果非负,则直接取整数部分
} else {
if (x % y == 0) {
result = (int)temp; // 如果x能被y整除,则直接取整数部分
} else {
result = ((int)abs(temp) + 1) * -1; // 如果x不能被y整除,则向零取整
}
}
cout << result; // 输出结果
return 0; // 返回0,表示程序执行成功
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on