1 条题解
-
0
📝 题目大意
给定一个整数 (),求 ,即大于等于 的最小整数。
💡 解题思路
-
题目分析:本题本质是求整数除以 10 的向上取整结果。C++ 的整数除法
/默认向零取整(truncate toward zero),不能直接得到向上取整,因此需要分正负讨论。 -
算法推导:
- 当 :使用经典的向上取整技巧
(x + 9) / 10。其原理是:若 能被 10 整除,则加 9 不会跨越下一个 10 的倍数,整除结果不变;若 不能被 10 整除,加 9 后恰好跨入下一个整数,实现 的效果。 - 当 :C++ 中整数除法向零取整的特性恰好天然满足向上取整。例如 (C++ 行为),而 ,两者一致。因此负数直接使用
x / 10即可。
- 当 :使用经典的向上取整技巧
-
边界与细节:
- :
(0 + 9) / 10 = 0,,正确。 - 为 10 的倍数:如 ,
(40 + 9) / 10 = 4;,`-20 / 10 = -2$,均正确。 - 数据范围可达 ,必须使用
long long(64 位有符号整数),int会溢出。
- :
⏱️ 复杂度分析
- 时间复杂度:仅常数次运算,。
- 空间复杂度:仅使用两个
long long变量,。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main(){ long long x,ans; // 使用 long long 防止溢出,X 范围可达 ±10^18 cin>>x; if(x>=0)ans=(x+9)/10; // 正数:向上取整技巧 (x+9)/10 else ans=x/10; // 负数:C++ 向零取整天然等于向上取整 cout<<ans; return 0; } -
- 1
信息
- ID
- 779
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者