• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

用JAVA解决ACM分数变小数

互联网 diligentman 4个月前 (12-10) 28次浏览

问题:

用JAVA解决ACM分数变小数

package main;

import java.util.ArrayList;

public class Main{
    public static void main(String[] args){
        System.out.println(new Main().proc(11, 59));
        System.out.println(new Main().proc(1, 3));
        System.out.println(new Main().proc(22, 5));
        System.out.println(new Main().proc(1, 7));
        System.out.println(new Main().proc(3, 8));
        System.out.println(new Main().proc(45, 56));
    }

    String proc(int N, int D){
        ArrayList<Integer> digits = new ArrayList<>();
        ArrayList<Integer> lefts = new ArrayList<>();
        Integer Left = new Integer(N % D);
        Integer Digit = new Integer(N / D);
        lefts.add(Left);
        digits.add(Digit);

        int startLoop = -1;
        int maxLoop = 100;
        while (Left != 0 && maxLoop > 0){
            maxLoop--;
            Digit = Left * 10 / D;
            Left = Left * 10 % D;
            boolean isExitLoop = false;
            for (int i=0; i<lefts.size(); i++){
                if (lefts.get(i) == Left){
                    startLoop = i + 1;
                    isExitLoop = true;
                    break;
                }
            }

            digits.add(Digit);
            lefts.add(Left);
            if (isExitLoop){
                if (digits.get(startLoop-1) == Digit){//循环小数有两种不同的模式,一种是从小数点后1位开始,第二种是非小数点后一位
                    startLoop--;
                    digits.remove(digits.size() - 1);
                }
                break;
            }
        }
        StringBuffer sb = new StringBuffer();
        if (digits.get(0) != 0){//商的整数部分>0
            sb.append(digits.get(0));
        }
        if (digits.size() > 1){
            sb.append('.');
        }

        for (int i=1; i<digits.size(); i++){
            if (i == startLoop){
                sb.append("(");
            }
            sb.append(digits.get(i));
        }
        if (startLoop > 0){
            sb.append(")");
        }

        return sb.toString();
    }
}


 


程序员灯塔
转载请注明原文链接:用JAVA解决ACM分数变小数
喜欢 (0)