• 面试题目-atof与ftoa


    ///////////////////////////////////////////////////////////////////////////////
    //
    //  FileName    :   atof_ftoa.cpp
    //  Author      :   Jimmy Han
    //  Date        :   2014/07/07 17:09    v1    
    //              :   2014/07/12 21:40    v2    
    //
    ///////////////////////////////////////////////////////////////////////////////
    #include <stdio.h> // for print
    #include <ctype.h> // for isspace, isdigit
    #define ARRAY_MAX 20
    
    /*
    *atof        将字符串数组转换为double数字
    *char s[]    输入字符数组
    *double      输出浮点型
    */
    double atof(char s[])
    {
        int i, sign;
        int rate = 1;
        bool bDot = false;
        double ret;
     
        //skip the space
        for(i = 0; isspace(s[i]); i++)
            ;
     
        //get the sign
        sign = s[i] == '-' ? -1 : 1;
     
        //store the sign
        if(s[i] == '-' || s[i] == '+')
            i++;
     
        for(ret = 0; s[i] != ''; i++)
        {
            if(s[i] == '.'){
                bDot = true;
                i++;
            }   
            //if interger part
            if(!bDot)
                ret = 10*ret + s[i] - '0';
            //if dot part
            else{
                rate*=10;
                //has to be explicit double cast, or int/int will not be right
                ret = ret + (double)((s[i] - '0'))/rate;
            }
        }
        return sign*ret;
    }
    
    /*
    *ftoa   transfer double to char array
    *dnum   input double number
    *str    input char array
    *len    input double length
    */
     
    char *ftoa(double dnum,char *str,int len)
    {
        int arrayNum[ARRAY_MAX];
        int pointPos=1;//the position of point
        int index=0;
        int i=0;
        if(dnum > 0)
        {
            //have only one bit for interger part
            while(dnum >= 10.0)
            {
                pointPos++;
                dnum/=10;
            }
     
            //convert to an integer array firstly
            for(i=0;i<len;i++)
            {
                if(i == pointPos)
                {
                    //'0'-2 represent '.'
                    arrayNum[i]=-2;
                    //next for loop
                    continue;
                }
                //get the integer part
                int num=dnum;
                arrayNum[i]=num;
                dnum-=num;
                dnum*=10;
            }
     
            //convert the integer to string
            for(i=0;i<len;i++)
            { 
                str[i]=arrayNum[i]+'0';
            }
            str[len]='';
        }
        return str;
    }
     
    int main()
    {
        //atof test
        char s[] = "-92.5";
        double result = atof(s);
        printf("char=%s, double=%f
    ",s, result);
    
        //ftoa test
        double flt=34.4324;
        char str[ARRAY_MAX];
        char *ret=ftoa(flt,str,7);
        printf("double=%f,char=%s
    ",flt,ret);
    
        return 0;
    }
    

      

  • 相关阅读:
    Codeforces Round #419 (Div. 2)
    论蒟蒻的自我修养
    12 day 1
    Balanced Teams (USACO Jan Bronze 2014)
    一个奇怪的绘图程序
    BZOJ 1002 [ FJOI 2007 ]
    BZOJ 3540 realtime-update 解题
    准备做的题目
    代码风格与树形DP
    CH round #55 Streaming #6
  • 原文地址:https://www.cnblogs.com/dracohan/p/3829457.html
Copyright © 2020-2023  润新知