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;

}
View Code

 

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。

你可能感兴趣的:(break)