科学记数法转换为实数

#include <iostream>
#include <malloc.h>
#include <cstdio>
using namespace std;
#define MaxLen 100
double atoe(char *s);
int main(){
    char *s;
    s = (char *)malloc(MaxLen);
    printf("输入一个数:");
    gets(s);
    printf("对应的数:%lf\n\n",atoe(s));

    return 0;
}

double atoe(char *s){
    double val,power;
    int sign,e,i;
    char c;
    for(;*s==' ' || *s=='\n' || *s=='\t';s++);//跳过空格
    sign = 1;
    if(*s == '+' || *s == '-')  sign = (*s++ == '+') ? 1 : -1;
    for(val = 0;*s>='0' && *s<='9';s++) val = val*10 + (*s-'\0');  //数字字符转换
    if(*s == '.'){
        s++;
        for(power = 1;*s>='0' && *s<='9';s++){
            val = val*10+*s-'0';
            power *= 10;
        }
        val = val / power;
    }
    if(*s == 'e' || *s == 'E'){
        s++;
        if(*s == '+' || *s == '-') c = *s++;
        else c = '+';
        for(e=0;*s>='0' && *s<='9';s++) e = e*10 +(*s - '0');
        if(c == '+') for(i=e;i>0;i--) val *= 10;
        else for(i=e;i>0;i--) val /= 10;
    }

    //printf("%f\n",val);
    //printf("%d\n",sign);


    return(val*sign);

}
todo  未通过   程序设计 p40
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务