方法一:借助理解取整函数的意义
时间复杂度:o(n)
#include <iostream>
#include <cstring>
using namespace std;
double n;
int main()
{
scanf("%lf", &n);
for (int i = 0; ; i ++ )
{
if (n >= 0)
{
if (n - i < 1)
{
printf("%d ", i);
break;
}
}
else
{
double t = n * (-1) - i;
if (t < 1 && t > 0)
{
printf("%d ", (-1)* i - 1);
break;
}
if (t == 0)
{
printf("%d ", (-1)* i);
break;
}
}
}
return 0;
}
方法二:借助函数库
时间复杂度:O(1)
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
double n;
scanf("%lf", &n);
int result;
if (n >= 0) {
result = static_cast<int>(ceil(n)); // 向上取整
} else {
result = static_cast<int>(floor(n)); // 向下取整
}
printf("%d ", result);
return 0;
}
非负数情况(n >= 0):
ceil(n)返回大于或等于n的最小整数(例如:ceil(3.2) → 4,ceil(3.0) → 3)
static_cast[HTML_REMOVED]()将结果转换为整数类型
负数情况(n < 0):
floor(n)返回小于或等于n的最大整数(例如:floor(-3.2) → -4,floor(-3.0) → -3)
注意:直接使用floor处理负数时,其行为符合数学上的向下取整定义