【数据结构与算法分析】1.3 用printOut函数输出任意实数

来源:互联网 发布:华为总是停用移动数据 编辑:程序博客网 时间:2024/05/17 08:55

问题描述:

       利用打印无符号整数的printOut函数打印任意实数

解决思路:

       就是把整数和小数部分拆分打印,这里有好多坑

       一是浮点数在计算机中存取的时候是不准确的

       二是浮点强转整数采取的“舍去法”

       三是你要考虑小数前几位是0和输入的就是一个小数的情况

       四是下面的代码是不完整准确的

算法实现:

#include<stdio.h>void printOut(unsigned int intPart);void printRealNum(double n,int decimal);double n;int deciCount;int main() {        while(scanf("%lf",&n)!=EOF){                scanf("%d",&deciCount);                printRealNum(n,deciCount);        }}void printOut(unsigned int intPart) {        if(intPart>=10)                printOut(intPart/10);        printf("%d",intPart%10);}void printRealNum(double n,int deciCount) {        if(n<0){                printf("-");                n=-n;        }        int intPart = 0;        if(n>=1){                intPart = n;                printOut(intPart);//输入数据如果就是小数,强制转化就直接成0了        }        double decimal = n-intPart;        int i,zeroCount = 0;        for(i=0;i<deciCount;i++){                decimal*=10;                if(decimal < 1)                        zeroCount++;//左起小数是0的情况        }        if(decimal != 0){                printf(".");                if(zeroCount)                        while(zeroCount){                                printf("0");                                zeroCount--;                        }                intPart = decimal;                printOut(intPart);        }else{                printf("0");        }}
0 0