C语言把一个数字从最高位开始,把0去掉,知道出现第一个非0的数字或者小数点
时间: 2023-05-24 07:03:35 浏览: 94
A:可以使用字符串和循环来实现该功能。首先,将数字转换为字符串形式,然后循环遍历字符串,遇到第一个非零数字或小数点即停止循环并返回该位置。以下是示例代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
double num = 0.0123456;
char str[20];
sprintf(str, "%.10f", num); // 将数字转换为字符串,保留10位小数
int i;
for (i = 0; str[i] != '\0'; i++) {
if (str[i] != '0' && str[i] != '.') {
break;
}
}
printf("第一个非零数字或小数点的位置是:%d", i + 1); // 字符串下标从0开始,因此要加1
return 0;
}
```
输出结果为:
```
第一个非零数字或小数点的位置是:2
```
即第二个字符为小数点。如果将数字改为1234.567即可测试第一个非零数字的位置。
相关问题
C语言把一个数字从最高位开始,把0去掉,直到出现第一个非0的数字或者小数点,得到的新数字如果最高位是小数点,则在小数点之前补一个0
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;
}
```
一个表示小数的整数,如何利用简单c语言把小数点第一位和第二位取出来
对于一个表示小数的整数,我们可以通过取模和除法的方式来取出小数点后面的数字。例如,假设我们有一个表示温度的整数变量temperature,单位是摄氏度,并且小数点后有两位,即表示精确到0.01度。那么我们可以通过以下代码来取出小数点后第一位和第二位的数字:
```c
int temperature = 2615; // 假设温度为26.15度
int decimal = temperature % 100; // 取出小数点后两位数字,即15
int decimal_first = decimal / 10; // 取出小数点后第一位数字,即1
int decimal_second = decimal % 10; // 取出小数点后第二位数字,即5
```
在上面的代码中,我们首先用取模运算符%取出temperature变量的后两位数字,即小数点后的数字15。然后再用除法和取模运算符将15拆分为小数点后第一位数字1和第二位数字5。最终,decimal_first变量存储的是小数点后第一位数字1,decimal_second变量存储的是小数点后第二位数字5。