赞
踩
读入一个实数,输出该实数的小数部分,小数部分若多余的末尾0,请去掉。如输入111111.12345678912345678900
则输出0.123456789123456789。若去掉末尾0之后小数部分为0,则输出“No decimal part”。注意该实数的位数不超过100位。
请定义并使用如下函数。
char *decimal(char *p)
{
将字符串p表示的实数的自小数点开始的小数部分存入一个字符串,并由函数返回,若p为“123.456”,则返回的字符串为“.456”。若小数部分为0,返回空指针NULL。
}
0.123456789000123456789
tips:
1 把传递过去的字符串,找到 '.' 开始的位置,然后从这个位置一直到 ‘\0’ 放到一个新的串中
2 在新的串中,从后往前判断是否为 ‘0’ ,如果是则 '\0' 前移
3 如果 '\0' 的前一个字符为 ‘.’ 说明小数部分为0 返回NULL
- #include<stdio.h>
- #include<stdlib.h>
- char *decimal(char *p){
- char *q;
- int i, j;
- q = (char*)malloc(sizeof(char)*100);
- for (i = 0; i < strlen(p); i++)
- {
- if (*(p+i)=='.') //找到 '.' 开始的位置
- {
- break;
- }
- }
- j = 0;
- while (i<strlen(p))
- {
- //*(q++) = *(p++);
- q[j++] = p[i++]; //复制到一个新的串中
- }
- q[j] = '\0';
-
-
- j--;
- while (q[j]=='0') //判断是否为 '0'
- {
- q[j] = '\0';
- j--; //j 始终指向 '\0' 的前一个字符位
- }
-
- if (q[j]=='.') //小数位为0
- {
- return NULL;
- }
- return q;
- }
-
- int main(){
- char buf[100];
- gets(buf);
- char *p;
- p = decimal(buf);
- if (p!=NULL)
- {
- printf("0%s",p);
- }
- else
- {
- printf("No decimal part\n");
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。