习题3_08循环小数(JAVA语言)

package 第三章习题;
import java.util.Arrays;
import java.util.Scanner;
/*
 * 输入整数a和b(0<=a<=3000,1<=b<=3000),
 * 输出a/b的循环小数表示以及循环节长度。
例如,a=5,b=43,
小数表示为0.(116279069767441860465),循环字节长度为21
 */
//循环不一定是从小数点后一位数开始,可能从之后才开始循环
public class 习题3_08循环小数 {
final static int MAX = 3005;
static int cx[]=new int[MAX];
static int fs[]=new int[MAX];
public static void main(String[] args) {
int n, m, t, i;
int cou= 0;
Scanner in=new Scanner(System.in);
n=in.nextInt();
m=in.nextInt();
cou = 0;
Arrays.sort(cx);
       Arrays.sort(fs);
   System.out.print(n+"/"+m+"="+n/m+".");
   t = n;
   while(true)
   {
       t = t % m * 10;
       fs[cou] = t / m;
       for(i = 0; i < cou; ++i)
       if(cx[i] == t) break;
       if(i != cou) break;
       cx[cou++] = t;
   }


   for(int q = 0; q < i;q++)
       System.out.print(fs[q]);
   System.out.print("(");


   if(cou > 50)
   {
       for(int q = i; q < i+50; q++)
           System.out.println(fs[q]);
       System.out.print("...");
   }
   else
   {
       for(int q = i; q < cou; q++)
           System.out.print(fs[q]);
   }
       System.out.println(")\n"+(cou-i)+"= number of digits in repeating cycle");
}


}

猜你喜欢

转载自blog.csdn.net/liuyaoyun/article/details/79346526