Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21100
  • 博文数量: 12
  • 博客积分: 288
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-04 18:52
文章分类

全部博文(12)

文章存档

2012年(12)

我的朋友

分类: C/C++

2012-05-05 16:41:34

一、题目

 

小强不喜欢C语言,可是又必须完成林老师的作业,所以非常苦恼,但又得常常编程到深夜。上次林老师又布置了一道作业:给你一个非负的双精度浮点数D,然后将D向下取整转化成一个整数ND的下取整就是把小数部分舍去,只留下整数部分。比如3.14的下取整就是3

但是现在他遇到了一个麻烦的问题,就是C语言中的双精度浮点数的表示范围是远远大于整型数的表示范围的。你能帮助小强解决这个问题吗?

输入

只有一个双精度浮点数DD用十进制小数表示,长度不大于300D一定为非负数。D有可能存在前导零,即会出现07.09的情况,此时应该输出7,也有可能去掉前导零,比如.009,此时应该输出0D也有可能为整数,如D=4,不包含小数点,此时应该输出4。除此之外,都是正常书写小数的习惯了。

输出

输出一个整数N,就是D的下取整。

样例输入

3.14

样例输出

3

提示

读入的时候用double型数据保存D,有可能存在精度不够的问题。

 

 

二、分析

1.因为数位过多,所以不适合使用doubleint,等数据类型保存数据,故选择使用字符数组保存数据。

2.通过函数对输入的数组进行处理,目标:若有前导0,则去除;若无前导0,则可以知道结果应该为0;若为0,则结果为0

3.主函数对处理过的字符串进行取整。

 


 

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int judge (char str[],char final[]);

  3. int main ()
  4. {
  5.     int i,s;
  6.     char str[300]={0},final[300]={0};
  7.     gets(str);    
  8.     if(judge(str,final))
  9.         printf("%d",0);
  10.     else
  11.     {
  12.         for (i=0;final[i]!='.'&&final[i]!=0;i++)
  13.         {
  14.             s=final[i]-48;
  15.             printf("%d",s);
  16.         }
  17.     }
  18.     return 1;
  19. }

  20. int judge (char str[],char final[])
  21. {
  22.     
  23.     int k=0,t,temp;
  24.     if (str[0]=='.')
  25.         return 1;
  26.     else if (str[0]=='0')
  27.     {
  28.         for (;str[k]=='0';k++);
  29.         if (str[k]=='.'||str[k]==0)
  30.          return 1;
  31.     }
  32.     
  33.     for (t=0+k,temp=0;str[t]!=0;t++,temp++)
  34.         final[temp]=str[t];
  35.     final[temp]=0;
  36.     return 0;
  37. }


 

阅读(305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~