Code Bye

科学计数法

给出一个标准输入的正数(开头末尾没有多余的0),输出其科学计数法表示结果。例如:输入0.000002,输出2e-6;输入123.456,输出1.23456e2;输入123456,输出1.23456e2
用%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
//

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明科学计数法