首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 等级考试 > 复习指导 >

C++应用实例十五(1)

2008-12-21 
循环小数的处理

    问题描述:

  Write a program that will accept a fraction of the form N/D, where N is the numerator and D is the denominator and print the decimal representation. If the decimal representation has a repeating sequence of digits, indicate the sequence by enclosing it in brackets. For example, 1/3 = .33333333...is denoted as 0.(3), and 41/333 = 0.123123123...is denoted as 0.(123). Use xxx.0 to denote an integer. Typical conversions are:

  1/3 = 0.(3) //将循环部分用( )扩起来。

  22/5 = 4.4

  1/7 = 0.(142857)

  2/2 = 1.0

  3/8 = 0.375

  45/56 = 0.803(571428)

  Input :

  A single line with two space separated integers,N and D,1<=N,D<=100000.

  Output :

  The decimal expansion, as detailed above. If the expansion exceeds 76 characters in length, print it on multiple lines with 76 characters per line.

  例子:

  输入:45 56

  输出:0.803(571428)

  程序代码:

  #include

  #include

  #include

  #define LEN 100 //最大小数位数

  typedef struct _div

  {

  long int num; //分子

  long int den; //分母

  long int quot[LEN]; //商

  long int resi[LEN]; //余数

  unsigned long int cycle_point; //循环点

  unsigned long int length; //商的个数

  }DIV;

  void divide(DIV &tmp)

  {

  unsigned int len=0, i=0;

  ldiv_t result;

  if(!tmp.den)

  {

  printf("Denominator Error!\n");

  exit(1);

  }

  while(len

  {

  result=ldiv(tmp.num ,tmp.den);

  tmp.quot[len]=result.quot;

  tmp.length+=1;

  if(result.rem!=0)

  {

  tmp.resi[len]=result.rem ;

  tmp.num=result.rem*10;

  while(i!=len)

  {

  if(tmp.resi[i]==result.rem)

  {

  tmp.cycle_point=i;

  return ;

热点排行