一、题目如下:
精确计算:输入两个数M,N(均小于100),M/N可能为有限小数,也可能为无限循环小数,如:1/4=0.25 1/7=0.142857142857142857......如果M/N为有限小数,则输出其所有的小数位,如果M/N为无限循环小数,则输出它小数点后面的一个循环节
二、附上解法:
由于M<N,且二者都是小于100的正整数,M除以N的结果为小于1的小数。M , N都是整数 ==>结果为有理数==>有限小数/无限循环小数,除尽 <==> 余数为0,出现循环 <==> 余数重复出现(与前面任何一个余数相等)
(1)有限小数,余数==0
(2)出现循环,余数重复出现
以上两个条件作为不再向下除的结束标志。
由于M,N都是小于100的正整数,所以每次的商最多有100种情况,余数也最多有100种,所以使用两个容量为100的数组保存余数和每次余数除以除数的商。只要新的余数在保存的余数数组中出现过,因为除数是同一个,所以这次的商之后的所有的商都会重复出现。
//c语言
#include <stdio.h>
void printRes(int M, int N){
int i, j;
int temp, flag = 0;
int remainder[100], r