当前位置:   article > 正文

ZZULIOJ 1165: 实数的小数部分(指针专题)

实数的小数部分(指针专题)

题目描述

读入一个实数,输出该实数的小数部分,小数部分若多余的末尾0,请去掉。如输入111111.12345678912345678900
则输出0.123456789123456789。若去掉末尾0之后小数部分为0,则输出“No decimal part”。注意该实数的位数不超过100位。
请定义并使用如下函数。
char *decimal(char *p)
{
字符串p表示的实数的自小数点开始的小数部分存入一个字符串,并由函数返回,若p为“123.456”,则返回的字符串为“.456”。若小数部分为0,返回空指针NULL。
}

输入

输入一个实数。不超过100位。

输出

输出小数部分,输出占一行。

样例输入

111111.12345678900012345678900

样例输出 

0.123456789000123456789

tips:

1  把传递过去的字符串,找到  '.' 开始的位置,然后从这个位置一直到  ‘\0’ 放到一个新的串中

2   在新的串中,从后往前判断是否为  ‘0’  ,如果是则  '\0'  前移

3    如果 '\0' 的前一个字符为 ‘.’  说明小数部分为0  返回NULL

 

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. char *decimal(char *p){
  4. char *q;
  5. int i, j;
  6. q = (char*)malloc(sizeof(char)*100);
  7. for (i = 0; i < strlen(p); i++)
  8. {
  9. if (*(p+i)=='.') //找到 '.' 开始的位置
  10. {
  11. break;
  12. }
  13. }
  14. j = 0;
  15. while (i<strlen(p))
  16. {
  17. //*(q++) = *(p++);
  18. q[j++] = p[i++]; //复制到一个新的串中
  19. }
  20. q[j] = '\0';
  21. j--;
  22. while (q[j]=='0') //判断是否为 '0'
  23. {
  24. q[j] = '\0';
  25. j--; //j 始终指向 '\0' 的前一个字符位
  26. }
  27. if (q[j]=='.') //小数位为0
  28. {
  29. return NULL;
  30. }
  31. return q;
  32. }
  33. int main(){
  34. char buf[100];
  35. gets(buf);
  36. char *p;
  37. p = decimal(buf);
  38. if (p!=NULL)
  39. {
  40. printf("0%s",p);
  41. }
  42. else
  43. {
  44. printf("No decimal part\n");
  45. }
  46. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/143767
推荐阅读
相关标签
  

闽ICP备14008679号