无线循环转换为最简分数
/** * * @param repeating * @param separate * @return */ public static String Repeating2Smallest(String repeating, String separate){ String separate_l = separate.substring(0,1); String separate_r = separate.substring(1,2); String separate_p = "."; int index_p = repeating.indexOf(separate_p); int index_l = repeating.indexOf(separate_l); int index_r = repeating.indexOf(separate_r); BigInteger number = new BigInteger(repeating.substring(0,index_p)); int n = index_l-index_p-1; BigInteger a = BigInteger.ZERO; if(n>0)a = new BigInteger(repeating.substring(index_p+1,index_l)); int m = index_r-index_l-1; BigInteger b = BigInteger.ZERO; if(m<=0) return "请输入正确的循环体"; if(m>0)b= new BigInteger(repeating.substring(index_l+1,index_r)); BigInteger numerator = NumeratorFormula(m, a, b); BigInteger denominator = DenominatorFormula(n , m); BigInteger gcd = BigInteger.ZERO; while(!gcd.equals(BigInteger.ONE)){ gcd = numerator.gcd(denominator); numerator = numerator.divide(gcd); denominator = denominator.divide(gcd); } return number+" "+numerator+"/"+denominator; } /** * * @param m * @param a * @param b * @return */ private static BigInteger NumeratorFormula(int m,BigInteger a,BigInteger b){ return BigInteger.TEN.pow(m).subtract(BigInteger.ONE).multiply(a).add(b); } /** * * @param n * @param m * @return */ private static BigInteger DenominatorFormula(int n,int m){ return BigInteger.TEN.pow(m).subtract(BigInteger.ONE).multiply(BigInteger.TEN.pow(n)); } public static void main(String[] args) { String s = "0.19[1919]"; System.out.println(Repeating2Smallest(s,"[]")); }