有限小数或无限循环小数化为分数(分数化为小数包含有限小数)
一、对大于1的自然数n,将其倒数1/n化成小数有三种类型:
- n的因数中只含有2或5,其结果必然是有限小数,且小数位数等于其因数2或5中最多的个数,例如:1/40=0.025,有3位小数,而40=2^3*5,其中含有3个因数2;
- 如果n中不含因数2或5,把它化成小数将是一个纯无限循环小数,这种情况前面已经介绍过;
- n中既有因数2或5又有其它因数,把它化成小数将是一个混无限循环小数:其中不循环部分的位数,等于其因数2或5中最多的个数;循环节的位数只由2或5以外的因数决定,例如:1/56=0.017’857142’,其中不循环部分有3位小数,循环节是6位,而56=2^3*7,其中含有3个因数2和一个因数7,我们已经知道7的倒数的循环节位数也是6位。
二、用C语言编程把单位分数化为小数:
//分数化小数(包含:有限小数 纯无限循环小数 混无限循环小数)
#include <stdio.h>
int main ()
{ int i,b,y,y1,w;//循环变量i,被除数b,余数y,循环节位数w,
int m,n; //范围[m,n],(其中m,n均为自然数,且2<=m<=n)
printf("请输入自然数范围m n(用空格隔开):"); scanf("%d %d",&m,&n);
if(m<=1) m=2; //排除0和1的倒数
for(i=m;i<=n;i )
{ y=i;w=0; //i给余数y;含因数2或5的最多个数w置0
while(y==0){ y/=10; w ; } //y能被几个10整除
while(y%2==0) { y/=2; w ; } //y能被几个2整除
while(y%5==0) { y/=5; w ; } //y能被几个5整除
printf("1/%d=0.",i);
y=1; //余数(被除数)置1
while(w!=0) //当含2或5的个数不是0时反复除:
{ y*=10; //余数后补0
printf("%d",y/i); //输出一位商(不循环部分)
y%=i; w--; //求新余数,个数减1
}
if(y==0) {printf("\n");continue;} //若是有限小数,看下一个i
printf("'"); //'为循环部分开始标记,用单引号' '里面表示一个循环节
b=y*10; y1=y; //先把余数*10传给b(保证下面的循环能进行);把循环开始前的余数传给y1
while(b!=y1) //当余数=循环开始时的余数时跳出
{ y*=10;w ; //余数*10变为被除数,累计循环部分位数
printf("%d",y/i); //输出一位商(循环部分)
y%=i; b=y; //求新余数,余数y传给除数b
}
printf("',其循环节有%d位\n",w); //'为循环部分结束标记,输出循环节位数w
}
}
三、单位分数化小数运行结果展示:
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com