给出一个标准输入的正数(开头末尾没有多余的0),输出其科学计数法表示结果。例如:输入0.000002,输出2e-6;输入123.456,输出1.23456e2;输入123456,输出1.23456e2
用%e或%E输出会有零 怎么办
用%e或%E输出会有零 怎么办
解决方案
40
改进5楼代码使其支持负数:
#include <stdio.h>
#include <string.h>
void trim0(char *s) {
// 2.000000e-006→2e-6
// 1.234560e+002→1.23456e2
// 1.234560e+005→1.23456e5
// 1.000000e+000→1e0
// -1.000000e+000→-1e0
char t[40];
int z,x,e;
sscanf(s,"%d.%6de%4d",&z,&x,&e);
if (0==x) {
sprintf(t,"%de%d",z,e);
} else {
while (1) {
if (x%10==0) x/=10; else break;
}
sprintf(t,"%d.%de%d",z,x,e);
}
strcpy(s,t);
}
int main() {
char s[40];
double d;
while (1) {
printf("Input a float number(0 to exit):");
fflush(stdout);
rewind(stdin);
if (1==scanf("%lf",&d)) {
if (0.0==d) break;
sprintf(s,"%e",d);
trim0(s);
printf("%s\n",s);
}
}
return 0;
}
//Input a float number(0 to exit):0.000002
//2e-6
//Input a float number(0 to exit):123.456
//1.23456e2
//Input a float number(0 to exit):123456
//1.23456e5
//Input a float number(0 to exit):1
//1e0
//Input a float number(0 to exit):-1
//-1e0
//Input a float number(0 to exit):0
//