为你奋斗 发表于 2010-3-11 18:14

大家来练习5

flashupload/swf/100311101402dvpgk6mo4l4x.jpg

lxgjianmo 发表于 2010-3-11 18:58

好题!!!!!!!!!!!!!!!!!!

数学者 发表于 2010-3-11 20:27

有空可以多做这类题,挺好的,呵呵~

nwave 发表于 2010-3-11 20:38

呵呵,不错。谁做出来了,可以和我交流。。。。。。。。。。。。。。。

sea_star666 发表于 2010-3-12 00:01

为什么没人发答案呢?

sea_star666 发表于 2010-3-12 00:03

关键是如何确定循环

sea_star666 发表于 2010-3-12 00:12

对于纯循环小数,转换方法是:循环节做分子;分母全是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 00:20

本帖最后由 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();           /*打印结果*/
}

mnpfc 发表于 2010-3-12 00:43

呵呵,顶楼上的

陈了 发表于 2010-3-12 09:36

呵呵呵呵。。。。顶楼上的!牛呀!
页: [1] 2
查看完整版本: 大家来练习5