Welcome to Leon's Blog  
日历
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
统计
  • 随笔 - 30
  • 文章 - 0
  • 评论 - 51
  • 引用 - 0

导航

常用链接

留言簿(4)

随笔分类

随笔档案

ACM

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
     这是我做1005题的代码,希望大家看完之后能给予指导。
   
 1#include <stdio.h>
 2
 3#define PI 3.141592
 4
 5int Caculate(float x, float y)
 6{
 7    int r = (int)((x*+ y*y) * PI / 100);
 8    return  r*100 >= (x*+ y*y)*PI ? r : r+1;
 9}

10
11int main(int argc, char* argv[])
12{
13    int n, i;
14    float x,y;
15    int year;
16    scanf("%d"&n);
17    for(i = 1; i <= n; i++)
18    {
19        scanf("%f %f"&x, &y);
20        year = Caculate(x, y);
21        printf("Property %d: This property will begin eroding in year %d.\n", i, year);
22    }

23    printf("END OF OUTPUT.\n");
24    
25    return 0;
26}

27
28
posted on 2008-05-29 08:40 Leon916 阅读(1171) 评论(4)  编辑 收藏 引用
评论:
  • # re: 1005探讨  汪江涛 Posted @ 2008-05-29 16:24
    鸡蛋里挑点骨头
    int Caculate(float x, float y)
    {
    int r = (int)((x*x + y*y) * PI / 100);
    return r*100 >= (x*x + y*y)*PI ? r : r+1;
    }
    似乎写成
    int Caculate(float x, float y)
    {
    float f = (x*x + y*y) * PI;
    int r = (int)(f / 100);
    return r*100 >= f ? r : r+1;
    }
    会更有效率,当然,鉴于x,y都是局部变量,PI为常数,这一步编译器应该可以给优化掉的  回复  更多评论   

  • # re: 1005探讨  Leon916 Posted @ 2008-05-30 08:19
    谢谢你!但是能给我解释一下吗?
    我觉得你这样写:
    float f = (x*x + y*y) * PI;
    int r = (int)(f / 100);
    和int r = (int)((x*x + y*y) * PI / 100);
    有什么不同?  回复  更多评论   

  • # re: 1005探讨  汪江涛 Posted @ 2008-05-30 12:58
    我可能有点只见树木不见森林,但我觉得这两句中
    int r = (int)((x*x + y*y) * PI / 100);
    return r*100 >= (x*x + y*y)*PI ? r : r+1;
    都包含 (x*y + y*y) * PI 这个表达式,如果不经编译器优化的话,这个表达式会被计算两次,按我改过的方法,只用计算一次就好了,当然差别不大的说  回复  更多评论   

  • # re: 1005探讨[未登录]  Leon Posted @ 2008-05-30 20:55
    当return r*100 >= (x*x + y*y)*PI ? r : r+1;
    这句话为什么回执行两次?
    这么理解?  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © Leon916 Powered by: 博客园 模板提供:沪江博客