计算分数的精确值-高精度除法
描述
计算分数的精确值。使用数组精确计算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;
}
另:如果想要判断其是否是循环小数以及循环节具体是什么,只需要加一个存放余数的数组,再加一个余数的对比(循环),查找是否存在相同的余数。