计算分数的精确值-高精度除法

描述

计算分数的精确值。使用数组精确计算M / N(0 < M < N ≤ 100)的值。如果M / N是无限小数或小数部分超过20位,则精度要求小数点后20位,并输出。

说明

由于计算机内字长有限,常规的浮点数运算都有精度限制,为了得到高精度的计算结果,就必须自行设计算法,这里涉及到的算法是高精度算法中的除法。

提示

可以将商存放在一维数组中,进行除法运算,可模拟人的手工操作,即每次求出商的一位后,将余数乘以10,再计算商的下一位。若某次余数为0,则为有限不循环小数。若某次计算后的余数与前面某个余数相同时,则M / N是无限循环小数。

代码C

#include<stdio.h>

int main()
{
    int M, N;
    int place[25];

    while (~scanf("%d %d", &M, &N))
    {
        printf("0.");
        int key = 0;
        while (M % N && key < 20)
        {
            M *= 10;
            place[key] = M / N;
            M %= N;

            printf("%d", place[key++]);
        }
        printf("\n");
    }

    return 0;
}

另:如果想要判断其是否是循环小数以及循环节具体是什么,只需要加一个存放余数的数组,再加一个余数的对比(循环),查找是否存在相同的余数。

全部评论

相关推荐

只写bug的程序媛:才15,我招行20多万,建设银行50多万,说放弃就放弃
点赞 评论 收藏
分享
01-02 21:17
已编辑
西安理工大学 后端
程序员小白条:项目不太重要,你的优势的算法竞赛,然后多背相关的八股文,项目可以不作为重点考虑,面试可能就简单带过项目就行了,你可以直接写简历,背项目相关的八股文就行,也不用自己做,时间紧张的情况下,性价比最高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务