1. 程式人生 > >2018.11.14資訊學奧賽輔導 向上取整

2018.11.14資訊學奧賽輔導 向上取整

ceil函式:

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

用 法: double ceil(double x);
功 能: 返回大於或者等於指定表示式的最小整數
標頭檔案: #include<cmath>

說明:
float ceil ( float value )
返回不小於 value 的下一個整數,value 如果有小數部分則進一位。ceil() 返回的型別仍然是 float,因為 float 值的範圍通常比 integer 要大。

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

輸出結果為:6

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

輸出結果:6

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

輸出結果:6 

【注意】下面的這種寫法不對

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

 輸出結果:0

原因:因為ceil()函式的返回值為double型別,而我們輸出的型別是%d型別,所以會出錯。因此我們最好在ceil函式前面加一個強制型別轉換,將ceil的值轉為int型別。

int

int 是向下取整數.

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

輸出結果:5.700000

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

 輸出結果:5

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

輸出結果:5 

注意:這樣寫會報錯。

#include<cstdio>
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<cstdio>
#include<cmath>
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<cstdio>
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<cstdio>
#include<cmath>
int main()
{
	double n,x,y;
	scanf("%lf%lf%lf",&n,&x,&y);
	printf("%d",(int)(n-y/x));
	return 0;
}