首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

POJ3197(连分数示意)

2013-10-17 
POJ3197(连分数表示)题目:http://poj.org/problem?id3197 分析:对于分数利用欧几里德算法可以写成连分数

POJ3197(连分数表示)

题目:http://poj.org/problem?id=3197

 

分析:对于分数利用欧几里德算法可以写成连分数的形式,这样p和q很大,用Java大数写很方便。

 

import java.io.*;import java.util.*;import java.math.BigInteger;public class Main{ static final int N = 100005; static BigInteger ans[] = new BigInteger[N]; static int cnt = 0;  static boolean EqualToZero(BigInteger x) {  if(x.compareTo(BigInteger.ZERO) == 0) return true;  else return false; }  static void gcd(BigInteger a,BigInteger b) {  cnt = 0;  ans[cnt++] = a.divide(b);  BigInteger r = a.mod(b);  while(!EqualToZero(r))  {   a = b;   b = r;   ans[cnt++] = a.divide(b);   r = a.mod(b);  }  ans[cnt++] = BigInteger.ONE;  ans[cnt-2] = ans[cnt-2].subtract(BigInteger.ONE); }  public static void main(String[] args) {  Scanner cin = new Scanner(System.in);  int tt = 1;  while(cin.hasNextBigInteger())  {   BigInteger p = cin.nextBigInteger();   BigInteger q = cin.nextBigInteger();   if(EqualToZero(p) && EqualToZero(q)) break;   gcd(p,q);   System.out.println("Case "+(tt++)+":");   System.out.println(p+" / "+q);   int length = 3*(cnt-1);   for(int i=0;i<cnt;i++)   length += ans[i].toString().length();   int len = length;   int ct = 0;   for(int k=0;k<cnt-1;k++)   {       int pos = ans[k].toString().length() +  3;       int record = pos;       int num = length - pos;       int tmp = 0;       if(num % 2 == 1)       {        tmp = num / 2 + 1;        pos += tmp;       }       else       {        tmp = num / 2;        pos += tmp;       }       for(int i=1;i<=ct;i++)        System.out.print(".");       for(int i=1;i<=length;i++)       {        if(i == pos) System.out.print("1");        else System.out.print(".");       }       System.out.println("");       for(int i=1;i<=ct;i++)        System.out.print(".");       System.out.print(ans[k]+".+.");       for(int i=1;i<=num;i++)       System.out.print("-");       System.out.println("");       length -= record;       ct += record;   }   for(int i=1;i<len;i++)   System.out.print(".");   System.out.println("1");  } }}


 

热点排行