重新去看那些初学时被忽略的知识点,发现自己不会的还有很多很多,故此记了些原来没有想过的点。
描述
将浮点数转换为整数类型,要求四舍五入。
输入描述:
随机输入的浮点数
输出描述:
四舍五入之后的整数
示例1
输入:
14.99
复制输出:
15
这是牛客网上的一道基础题,?基础不代表简单,只是代表它所需要的前提知识较少。
下面是C++的源代码:
#include <iostream>
using namespace std;
int main() {
double d;
cin >> d;
int a = int(d);
double b = d-a;
if(b>=0.5){
a++;
}
if(b<=-0.5){
a--;
}
cout<<a;
// write your code here......
return 0;
}
解析:
? ? ? ? 这道题看似简单,先分正负,再进行判断。但仔细一想,这道题非常值得去反复琢磨。
之所以将这一篇作为这个分类的第一篇:
为的就是告诉初学者们:
不要再用数学的角度看待问题,尝试用数据,字符的方式去看待问题,以计算机的方式去思考题目。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
这样的思路重要到,你未来3-6个月内所有做不出来的coding题目,十有八九都是此类错误。表现为:拿到题目很懵逼,一看答案,这么简单。
四舍五入同样要对数值串进行分类,一种为正,一种为负。
由于int自动转型为截取模式,无论正负都会自动取小数点之前的,表现为正数截取后比原来小,负数被截取后比原来更大:
????????????????????????????????????????17.88——17
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -17.88——? -17
因此可以将一个带有小数点的数值分为两部分:
?当数值为正时,只要进行判断b的值是否>=0.5。
?当数值为负时,由于负值Int转型后,新的数会比原来的数更靠近0,因此比原来更大。
由于公式:
? ? ? ? ? ? ? ? 总值 = a + b;? ?此时由于a增加,因此b要减少
那么对这个浮点数b的判断就是,b是否<=0.5;
|