T3-1 向上取整
2024-10-02 13:23:32
发布于:天津
第一题
题目大意
给出一个整数,要求你求出 。
思路分析
由于C++本身的特性是整数相除会舍去小数部分,因此在计算的过程当中,如果为负数,那么在计算过程中结果舍去小数本身就是一种向上取。假如说正数,我们则需要判断是否存在小数部分进行进位。
在这道题目当中,如果说 那么x/10的结果本身就是向上取整。
如果,那么我们则要考虑是否需要进位,在这里x/10的结果,我们可以提前默认个位就是小数位,给他+9,再去/10 ,即可完成进位 ,即(x + 9) / 10 。
为什么ceil不能用?
注意到本题的数据范围为 。ceil运算的时候,会将变量转换为double类型,通常为IEEE-754 binary 64格式,有一个符号为,11个指数位,53有效精度位。
53位有效精度位其中还包含了15~17位有效的十进制数字的精度位,这意味着表示的整数范围只有。所以在向上取整时,可能会出现精度缺失的情况。导致整数部分表达错误。
所以我们采取最简便的方式,给个位+9,完成进位。
#include<iostream>
using namespace std;
int main()
{
long long x;
cin >> x;
if(x > 0 )cout << (x + 9) / 10 << endl;
else cout << x/10 << endl;
}
这里空空如也
有帮助,赞一个