2018.11.14資訊學奧賽輔導 向上取整
阿新 • • 發佈:2019-02-19
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;
}