hdu 4112 Break the Chocolate(ceil floor)
规律题:
#include<stdio.h> #include<math.h> #define eps 1e-8 int main() { int _case; int n,m,k,i; __int64 ans1; int ans2,ans; scanf("%d",&_case); for(i=1;i<=_case;i++) { scanf("%d%d%d",&n,&m,&k); printf("Case #%d: ",i); ans1=(__int64)n*m*k-1;// ans=0; ans2=log((double)n)/log(2); ans+=ans2; if(log((double)n)/log(2)-ans2>eps)ans++; ans2=log((double)m)/log(2); ans+=ans2; if(log((double)m)/log(2)-ans2>eps)ans++; ans2=log((double)k)/log(2); ans+=ans2; if(log((double)k)/log(2)-ans2>eps)ans++; printf("%I64d %d\n",ans1,ans); } return 0; }
#include<stdio.h> #include<math.h> int main() { int t,T,n,m,k,ans2; __int64 ans1; scanf("%d",&T); for(t=1;t<=T;t++) { scanf("%d%d%d",&n,&m,&k); ans1=(__int64)n*m*k-1; ans2=(ceil(log(n*1.0)/log(2.0))+ceil(log(m*1.0)/log(2.0))+ceil(log(k*1.0)/log(2.0))); printf("Case #%d: %I64d %d\n",t,ans1,ans2); } return 0; }
C语言有以下几种取整方法:
1、直接赋值给整数变量。如:
int i = 2.5; 或 i = (int) 2.5;
这种方法采用的是舍去小数部分
2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关。
3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:
floor(2.5) = 2
floor(-2.5) = -3
4、使用ceil函数。ceil(x)返回的是大于x的最小整数。如:
ceil(2.5) = 3
ceil(-2.5) = -2
floor()是向负无穷大舍入,floor(-2.5) = -3;ceil()是向正无穷大舍入,ceil(-2.5) = -2。