大家来练习5
flashupload/swf/100311101402dvpgk6mo4l4x.jpg 好题!!!!!!!!!!!!!!!!!! 有空可以多做这类题,挺好的,呵呵~ 呵呵,不错。谁做出来了,可以和我交流。。。。。。。。。。。。。。。 为什么没人发答案呢? 关键是如何确定循环 对于纯循环小数,转换方法是:循环节做分子;分母全是9,9的个数为循环节长度。。再约分即可例:0.1111111...=1/9
0.123 123 123....=123/999=41/333
0.35 35 35..=35/99
对于混循环小数,转换方法是:分子为两数之差-----
被减数:小数点后第一位的数直到第一个循环节结束,这几个数字构成的数作为被减数;
减数:未参与循环的小数部分,
分母由9和0组成,9的个数为循环节长度,0的个数为未循环部分长度。。再约分即可
例:0.1 23 23 23 23....=(123-1)/990=122/990=61/495
0.73 865 865 865...=(73865-73)/99900=73792/99900=18448/24975
0.32 11111111...=(321-32)/900=289/900 本帖最后由 sea_star666 于 2010-3-12 23:19 编辑
#include<stdio.h>
#define Max 100 /*小数点后最大位数*/
int Left;
int Digit; /*记录每次的余数和商*/
int n,d,q,Top; /*q为循环字节的位置*/
void Init(void)
{
printf("ENTER N,D:");
scanf("%d %d",&n,&d);
}
void Cacl(void) /*计算*/
{
int i=0,j=1;
Digit=n/d; /*求商*/
Left=n%d; /*求余数*/
Top=0;
q=0; /*初始化商和余数*/
while(Left!=0&&j==1&&Top<100)
{
Top++; /*取下一个数组元素*/
Digit=(Left*10)/d; /*求商*/
Left=(int)(Left*10)%d; /*求余数*/
for(i=0;i<Top-1;i++)
{
if(Left==Left) /*如果出现循环节则退出*/
{
q=i+1;
j=0;
break;
}
}
}
}
void Print(void) /*输出计算结果*/
{
int i;
printf("n/d= ");
if(Digit!=0) printf("%d",Digit);
if(Top>0) printf(".");
for(i=1;i<=Top;i++)
{
if(i==q) printf("(");
printf("%d",Digit);
}
if(q>0) printf(")");
}
void main(void)
{
Init(); /*读入数据*/
Cacl(); /*计算*/
Print(); /*打印结果*/
} 呵呵,顶楼上的 呵呵呵呵。。。。顶楼上的!牛呀!
页:
[1]
2