给出一个标准输入的正数(开头末尾没有多余的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 //