题目描述
读入一个实数,输出该实数的小数部分,小数部分若多余的末尾0,请去掉。如输入111111.12345678912345678900
则输出0.123456789123456789。若去掉末尾0之后小数部分为0,则输出“No decimal part”。注意该实数的位数不超过100位。
请定义并使用如下函数。
char *decimal(char *p)
{
将字符串p表示的实数的自小数点开始的小数部分存入一个字符串,并由函数返回,若p为“123.456”,则返回的字符串为“.456”。若小数部分为0,返回空指针NULL。
}
输入
输入一个实数。不超过100位。
输出
输出小数部分,输出占一行。
样例输入 Copy
111111.12345678900012345678900
样例输出 Copy
0.123456789000123456789
思路:
1.倒着检查一遍,如果为0,且后一个是\0,则把此处变为\0;
2.将小数部分存入另一个字符串中,后输出
#include<stdio.h>
#include<string.h>
char *decimal(char *p)
{
char b[100]={0};
int i, j=0, k;
for(i=strlen(p)-1;*(p+i)!='.';i--)
{
if(*(p+i)=='0'&&*(p+i+1)=='\0')
{
*(p+i)='\0';
}
else
{
b[j]=*(p+i);
j++;
}
}
if(j==0)
{
printf("No decimal part\n");
}
else
{
printf("0.");
for(j=j-1;j>=0;j--)
{
printf("%c",b[j]);
}
}
}
int main()
{
char a[100];
gets(a);
decimal(a);
return 0;
}