java实现整数分解为连续整数乘积

前段时间做了一道算法题,如下:
【题目描述】
一个大于2的整数N,他可能等于比它小的若干个整数(大于等于2并且不等于自己)乘积。如果存在这样的连续整数,将他们输出,如果没有则输出-1。 
例: 整数60,60=3*4*5,所以输出[3 4 5]。
计算结果按行输出至本地文件,输出顺序按照参数读入的顺序输出。

【输入文件内容样例】
120
139708800
914848764359059584
2032957340612951426
57274321104000
……

【输出文件内容样例】
[2 3 4 5],[4 5 6]
-1
-1
-1
[49 50 51 52 53 54 55 56]
……

我的解答如下,可供参考:

    private String dealBiz(String infilename) throws Exception {

        int index = infilename.lastIndexOf(File.separator);
        String path = infilename.substring(0, index);
        String retfullfile = path + File.separator + "out.txt";   // 最终生成的结果文件路径

        List<String> writeout = new ArrayList<String>();

        InputStreamReader read = new InputStreamReader(new FileInputStream(infilename));
        BufferedReader bufferedReader = new BufferedReader(read);
        String linestr = null;
        while ((linestr = bufferedReader.readLine()) != null) {
            if (linestr.length() > 1) {
                String lineresule = "";
                long line = 0;
                try {
                    line = Long.parseLong(linestr);
                } catch (Exception e) {
                    writeout.add("-1");
                    continue;
                }

                long times = (long) Math.sqrt(line); // 最大循环次数只要开平方根取整次即可

                long succ = 0;
                for (long i = 2; i <= times; i++) {
                    long templine = line;
                    long tempi = i;
                    String canuse = "[";

                    boolean isgo = true;
                    while (isgo) {
                        isgo = isgo(templine, tempi);
                        if (isgo) {
                            canuse = canuse + tempi + " ";
                            if (templine / tempi == 1) {
                                canuse = canuse + "]";
                                lineresule = lineresule + canuse + ",";
                                succ++;
                                break;
                            }

                            templine = templine / tempi;
                            tempi = tempi + 1;

                        }
                    }
                }
                if (succ == 0) {
                    lineresule = "-1";
                }
                int index2 = lineresule.lastIndexOf(",");
                if (index2 > 0) {
                    lineresule = lineresule.substring(0, index2);
                }
                writeout.add(lineresule);

            } else {
                break;
            }

        }
        read.close();

        BufferedWriter bw = new BufferedWriter(new FileWriter(new File(retfullfile)));

        int size = writeout.size();
        for (int i = 0; i < size; i++) {
            String line = writeout.get(i) + "\r\n";
            bw.write(line);
        }

        bw.close();

        return retfullfile;

    }

    public boolean isgo(long line, long i) {
        if (line % i == 0) {
            return true;
        }
        return false;
    }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值