题目描述
读入一个实数,输出该实数的小数部分,小数部分若多余的末尾0,请去掉。如输入111111.12345678912345678900
则输出0.123456789123456789。若去掉末尾0之后小数部分为0,则输出“wls,tq1”。注意该实数的位数不超过100位。
使用如下函数:
char *decimal(char *p)
{
将字符串p表示的实数的自小数点开始的小数部分存入一个字符串,并由函数返回,若p为“123.456”,则返回的字符串为“.456”。若小数部分为0,返回空指针NULL。
}
输入
输入一个实数。不超过100位。
输出
输出小数部分,输出占一行。
样例
输入 Copy
111111.12345678900012345678900
输出 Copy
0.123456789000123456789
题解
以下是符合要求的C语言程序:
#include
#include
char *decimal(char *p) {
// 找到小数点位置
char *dot = strchr(p, '.');
if (dot == NULL) return NULL; // 如果找不到小数点,返回空指针
// 返回小数部分,去掉末尾多余的0
char *result = dot + 1;
int len = strlen(result);
while (len > 0 && result[len-1] == '0') {
result[--len] = ' ';
}
if (len == 0) return NULL; // 如果小数部分全是0,返回空指针
return result;
}
int main() {
char num[101];
scanf("%s", num);
char *dec = decimal(num);
if (dec == NULL) {
printf("wls,tq1n");
} else {
printf("%sn", dec);
}
return 0;
}
该程序首先调用decimal
函数,将输入的实数字符串中的小数部分提取出来,并去掉多余的末尾0。如果小数部分全是0,则返回空指针。然后,在主函数中判断是否返回了空指针,如果是则输出”wls,tq1″,否则输出小数部分。
需要注意的是,由于输入的实数字符串长度可能达到100位,因此在定义字符数组时需要开辟足够大的空间,同时在读入实数字符串时应该使用scanf
函数,而不是gets
或fgets
函数,因为后两者存在缓冲区溢出的安全问题。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net