2018.11.14信息学奥赛辅导 向上取整

ceil函数:

ceil:在英文中,是天花板的意思,有向上的意思,所以,此函数是向上取整。

用 法: double ceil(double x);
功 能: 返回大于或者等于指定表达式的最小整数
头文件: #include

说明:
float ceil ( float value )
返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。

#include
#include
 
int main()
{
    double a = ceil(5.4);
	printf("%d",(int)a);
	return 0;
}

输出结果为:6

#include
#include
 
int main()
{
	printf("%d",(int)ceil(5.4));
	return 0;
}

输出结果:6

#include
#include
using namespace std;
int main()
{
	cout << ceil(5.4);
	return 0;
}

输出结果:6 

【注意】下面的这种写法不对

#include
#include
 
int main()
{
	printf("%d",ceil(5.4));
	return 0;
}

 输出结果:0

原因:因为ceil()函数的返回值为double类型,而我们输出的类型是%d类型,所以会出错。因此我们最好在ceil函数前面加一个强制类型转换,将ceil的值转为int类型。

 

int

int 是向下取整数.

#include
int main()
{
	printf("%lf",5.7);
	return 0;
}

输出结果:5.700000

#include
int main()
{
	printf("%d",(int)5.7);
	return 0;
}

 输出结果:5

#include
#include
using namespace std;
int main()
{
	cout << int(5.7);
	return 0;
}

输出结果:5 

注意:这样写会报错。

#include
int main()
{
	printf("%d",5.7);
	return 0;
}

也是因为5.7是小数类型的,而“%d”指的是整数,类型不一致,输出的结果可能是任意的数。

 

例题:

【苹果和虫子】

描述

你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

输入

输入仅一行,包括n,x和y(均为整数)。输入数据保证y <= n * x。

输出

输出也仅一行,剩下的苹果个数

样例输入

10 4 9

样例输出

7

提示

注意:是要求完整的苹果数。

代码:

(用ceil函数)

#include
#include
int main()
{
	double x,y;
	int n;
	scanf("%d%lf%lf",&n,&x,&y);
	int k = ceil(y/x);
//	printf("%d ",k);
	printf("%d",n-k);
	return 0;
}

(用int强制类型转换)

#include
int main()
{
	double n, x, y;
	scanf("%lf%lf%lf",&n,&x,&y);
//	printf("%lf ",y/x);
	int k = n - y/x;
	printf("%d",k);
	return 0;
}

或者:

#include
#include
int main()
{
	double n,x,y;
	scanf("%lf%lf%lf",&n,&x,&y);
	printf("%d",(int)(n-y/x));
	return 0;
}

 

 

你可能感兴趣的:(学生辅导)