您的位置:首页 > 其它

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

2016-06-28 11:33 351 查看

描述

计算分数的精确值。使用数组精确计算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;
}


另:如果想要判断其是否是循环小数以及循环节具体是什么,只需要加一个存放余数的数组,再加一个余数的对比(循环),查找是否存在相同的余数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  高精度