码迷,mamicode.com
首页 > 其他好文 > 详细

华中农业大学新生赛C题

时间:2016-12-19 08:40:19      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:小数   输出   ret   else   tchar   小数点   sprintf   nbsp   end   

http://acm.hzau.edu.cn/problem.php?id=1099

题意:

输入两个整数 l 和 n,代表半径和output的保留小数点位数。

输出圆的面积,保留n位小数。

 

一开始觉得用抑制符就可以了,然后发现它保留的时候会四舍五入,所以不行。

知识主要用到了floor函数(返回不大于传参值的最大整数(double)类型)以及sprintf。

AC代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 #define PI 3.1415926535
 5 int main(void)
 6 {
 7     double l;
 8     int n;
 9     while (scanf("%lf %d", &l, &n) != EOF)
10     {
11         if (!l) printf("0");
12         else if (!n) printf("%.lf", floor(PI*l*l));
13         else
14         {
15             char str[1000];
16             sprintf(str, "%.*lf", n + 2, PI*l*l);
17             printf("%.lf.", floor(PI*l*l));
18             for (int i = 0; ; i++)
19             {
20                 if (str[i] == .) {
21                     for (int j = i + 1; j <= i + n; j++)
22                         printf("%c", str[j]);
23                     goto end;
24                 }
25             }
26         end:;
27         }
28         putchar(\n);
29     }
30     return 0;
31 }

 

华中农业大学新生赛C题

标签:小数   输出   ret   else   tchar   小数点   sprintf   nbsp   end   

原文地址:http://www.cnblogs.com/ray-coding-in-rays/p/6196146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!