在用floor(XXX+0.5)做四舍五入时候发生的问题

来源:互联网 发布:serverlet接受表单数据 编辑:程序博客网 时间:2024/06/05 23:52

在做C++primer第五版,第3.20题.

读入一组整数并把他们存入一个vector对象,要求输出 第一个和最后 一个元素 的和,接着输出第二个和倒数第二个元素的和,依此类推。

代码如下:

#include "iostream"#include "vector"#include "cmath"using std::vector;using std::cin;using std::cout;using std::endl;int main(){vector <int> ivec;ivec ={12,11,32,43,34,32,53};int length=ivec.size();//注意此处length本身是int,在做length/2时候就已经是3了,所以 在加0.5也就是3.5//依然会被 for(decltype(length) j=0;j<floor(length/2.0+0.5);j++){if(j!=(length-1-j))cout <<ivec[j]+ivec[length-1-j] <<endl;elsecout <<ivec[j] <<endl;} return 0;} 

在开始写的时候,for循环里面写的是j<floor(length/2+0.5),改正后发现是最基本的类型错误,声明 的length为int类型(注意ivec,size()返回的类型为vector<int>::size_type属性),length在除以2时已经取整数为3了,所以后面即使加上0.5也还只是3.5,不能进位,在使用 floor(XXX+0.5)这样的操作时,应该确保XXX处表达式的有效性.

 

0 0
原创粉丝点击