计算2个数字的除法并在Java中显示重复出现的模式

时间:2015-03-21 17:20:07

标签: java decimal division

感谢大家放下。

我希望分割2个数字,并且我希望以完全准确的方式打印数字。

发生小数模式后,我想要一个逗号并指出重复模式的长度。

1 个答案:

答案 0 :(得分:1)

你可以解决这个问题的一种方法就是通过做这样的长时间划分,你想要做的就是解决你的问题,就像你在一张纸上长时间划分一样。

static void codeCamperDivison(long n, long d) {
    long r; // remainder
    long g; // goes into
    StringBuilder s = new StringBuilder();
    ArrayList<Long> rh = new ArrayList<Long>(); // remainder history
    ArrayList<Long> gh = new ArrayList<Long>(); // goes into history
    for (long i = 0;; i++) {
        r = n % d;
        g = n / d;
        s.append(g);
        if (i == 0) // whole number portion
            s.append(".");
        if (r == 0) { // non-recurring number
            s.append(0);
            break;
        }
        gh.add(g);
        if (rh.contains(r)) { // recurring pattern found
            s.append(",");
            List<Long> pattern = gh.subList(rh.lastIndexOf(r) + 1, gh.size());
            for (long l : pattern)
                s.append(l);
            s.append("...");
            if (pattern.size() == 1)
                s.append("\nrecurring length=infinite");
            else
                s.append("\nrecurring length=" + pattern.size());
            break;
        }
        rh.add(r);
        n = r * 10; // add a 0 like in long division
    }
    System.out.println(s.toString()); // print results
}