🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
一、题目描述
1.1 输入描述
1.2 输出描述
二、测试样例
三、解题思路
3.1 方法一
3.2 方法二
四、代码实现
4.1 方法一
4.2 方法二
五、时间复杂度
注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 5, 向上取整;小于 5,则向下取整。
输入一个正浮点数值
输出该数值的近似整数值
输入
5.5
输出
6
本题可以通过两种方法求解。
通过字符串处理正浮点数,判断第一位小数是否大于等于 5,如果是则模拟将整数部分的字符串加 1,否则,输出整数部分的字符串。
将输入值乘以 10,取整后取余数,此时,余数为第一位小数,然后,判断余数是否大于等于 5,如果是则将输入值加 1。最后将输入值取整输出。
通过字符串处理输入值,代码如下所示。
#include
#include
#include
using namespace std;//将字符串里存储的整数加 1
string strAddOne(string str)
{string ans;bool flag = true;for (int i = str.size() - 1; i >= 0; --i) {if (!flag) {str = str.substr(0, i + 1);reverse(str.begin(), str.end());ans += str;break;}if (str[i] == '9') { // 如果是 9,则进一ans += '0';} else {flag = false;ans += (str[i] + 1);}}if (flag) { // 注意最后还有进位的情况ans += '1';}reverse(ans.begin(), ans.end());return ans;
}
string slove(string str)
{bool flag = false;int idx = str.find('.'); //判断是否可以进位if (idx + 1 < (int)str.size() && str[idx + 1] >= '5') {flag = true;}str = str.substr(0, idx);return flag ? strAddOne(str) : str;
}int main()
{string str;while (cin>>str) {if (str.find('.') == string::npos) { // 判断是否存在小数部分cout<
通过取余判断第一位小数,代码如下所示。
#include
#include
using namespace std;int main()
{double ans;while(cin>>ans) {int rem = (int)(ans * 10) % 10; // 取得小数点后第一个小数的值if (rem >= 5) { // 判断小数的值ans += 1;}cout<<(int)ans<
方法一的时间复杂度为 O(1),方法二的时间复杂度为 O(n),其中,n 为字符串的长度。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
上一篇:西风八月九月,土地秋黄
下一篇:用的在机,显的在势