C语言把一个数字从最高位开始,把0去掉,直到出现第一个非0的数字或者小数点,得到的新数字如果最高位是小数点,则在小数点之前补一个0
时间: 2023-05-24 21:03:40 浏览: 123
求整数的位数及各位数字之和 C语言
A:
可以先将数字转换成字符串,然后从字符串的最高位开始遍历,直到遇到第一个非0的字符或小数点字符,将剩下的字符组成新的字符串。如果最高位是小数点,则在新字符串开头插入一个字符'0'。最后将新字符串转换成数字即可。
代码示例:
```c
#include <stdio.h>
#include <string.h>
double trim(double num) {
// 将数字转换成字符串
char str[20];
sprintf(str, "%.18g", num);
// 寻找第一个非0字符或小数点字符的位置
int pos;
for (pos = 0; pos < strlen(str); pos++) {
if (str[pos] != '0' && str[pos] != '.') {
break;
}
}
// 构造新字符串
char newStr[20];
if (str[pos] == '.') {
newStr[0] = '0';
newStr[1] = '.';
strcpy(newStr + 2, str + pos + 1);
} else {
strcpy(newStr, str + pos);
}
// 将新字符串转换成数字
double newNum;
sscanf(newStr, "%lf", &newNum);
return newNum;
}
int main() {
double num = 0.0001234000;
printf("%.18g\n", trim(num)); // 输出0.0001234
num = 123400000.0;
printf("%.18g\n", trim(num)); // 输出123400000
num = 0.002;
printf("%.18g\n", trim(num)); // 输出0.002
return 0;
}
```
阅读全文