• 输出任意实数


    来自:【数据结构与算法分析——C语言描述】练习1.3

    思路:取得一个数的整数部分和小数部分。整数部分直接用类型强制转换,然后用数减去整数部分得到小数部分。

    1. 打印整数部分;

    void printOut(int n)
    {
        if (abs(n) >= 10)
        {
            printOut(n / 10);
            printDigit(abs(n % 10));
        }
        else
            printDigit(n);
    }

    至于printDigit(),感觉有点鸡肋。为了迎合题目,加上了。

    void printDigit(int n)
    {
        printf("%d", n % 10);
    }

    2.如果小数部分不为0,则将小数点后六位转换成整数部分,将之打印。结束。

    for (int i = 0; i < 6; i++)        //小数点后六位转化为整数
        decPart *= 10;
                    
    intPart = abs((int)decPart);
    printOut(intPart);                 //打印转化后的小数部分

    实现:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    void printDigit(int n);
    void printOut(int n);
    
    int main(void)
    {
        double n, decPart;                    //数和小数部分
        int intPart;                          //整数部分
    
        n = -214748.3647;
        intPart = (int)n;
        decPart = n - (double)intPart;
    
        printOut(intPart);
        if (decPart)
        {
            printf(".");    
            
            for (int i = 0; i < 6; i++)        //小数点后六位转化为整数
                decPart *= 10;
                    
            intPart = abs((int)decPart);
            printOut(intPart);                 //打印转化后的小数部分
        }
    
        system("pause");
        return 0;
    }
    
    /*打印整数*/
    void printOut(int n)
    {
        if (abs(n) >= 10)
        {
            printOut(n / 10);
            printDigit(abs(n % 10));
        }
        else
            printDigit(n);
    }
    
    /*打印1位*/
    void printDigit(int n)
    {
        printf("%d", n % 10);
    }

    为什么只打印小数点后6位,而不是全部 —— 万一输入的数有8位小数呢?我们知道,大部分浮点数保存在计算机中都只是一个近似值,对小数部分有截短或进位。比如输入123.123123,内部可能存为123.12312300000001。所以这里只取前6位的。如果使用精确数值类型,就可以有效地避免这种精度丢失的问题。

    如果您有更好的算法,欢迎交流。与前辈和爱好者学习是我的荣幸。谢谢!

    参考链接:http://blog.csdn.net/fuzhengchao/article/details/7634589 

  • 相关阅读:
    一幅图解决R语言绘制图例的各种问题
    新时代,建立你的数据分析思维
    新时代,建立你的数据分析思维
    聚类分析基础知识总结及实战解析
    聚类分析基础知识总结及实战解析
    js中 opener和parent的差别
    Latex中參考文献排序
    Android之——清理手机SD卡缓存
    drupal7 使用(hook_preprocess_HOOK)向各个主题模版里面传递变量
    python 正則表達式推断邮箱格式是否正确
  • 原文地址:https://www.cnblogs.com/mingc/p/5862403.html
Copyright © 2020-2023  润新知