X-man

导航

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。

posted on 2013-10-06 10:50  雨钝风轻  阅读(332)  评论(0编辑  收藏  举报