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

在做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;
		else
			cout <<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处表达式的有效性.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值