一些相续正整数的立方和正好等于另一个整数的立方,java代码

如图

解决类似的问题的java代码,没有进行过代码优化,可以使用python的特性进行简单验证,比如:6**3==(3**3+4**3+5**3),该表达式可以直接输出验证结果,文中的代码因为使用Integer类型作为计算变量,我测试了一下,大概只能进行5000以内的计算,如果想要进行更大数的计算,则需要对代码中的计算变量类型进行替换,可以考虑BigInteger或者BigDecimal类型

package com.exam.swing.module;

import java.util.Scanner;

public class MathProof {
    public static void main(String[] args) {
        long millis = System.currentTimeMillis();

        //验证等式: 一些相续正整数的立方和正好等于另一个整数的立方。
        {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个整数上限:");
            int num = scanner.nextInt();
            //计算该整数内所有数的立方和并存储在一个数组中
            Integer arrResult[] = new Integer[num];
            for (int i = 1; i <= num; i++) {
                arrResult[i - 1] = i * i * i;
            }

            Integer result = 0;//获得连续的数的立方和
            String str = "";//以字符串形式统计所用的数,形成一个表达式

            for (int i = 1; i <= num; i++) {//最外层循环次数
                for (int j = 1; j < num; j++) {//作为开始求和的最小值
                    //清空上次计算的结果
                    result = 0;
                    if (str.length() != 0) {
                        str = "";
                    }
                    for (int k = j; k < num; k++) {//最内层计算该数的组成
                        result += k * k * k;
                        str = str + "" + k + "^3" + "+";
                        if (result.equals(arrResult[i - 1])) {
                            int temp = k * k * k;
                            //再次判断是否是本身的立方,如果是本身的立方,则跳过
                            if (temp == arrResult[i - 1]) {
                                break;
                            }
                            //直接输出计算的结果
                            System.out.println("值" + arrResult[i - 1] + "," + i + "^3=" + str.substring(0, str.length() - 1));
                            break;
                        } else if (result > arrResult[i - 1]) {
                            //计算的结果大于要求,跳出循环
                            break;
                        }
                    }
            }
            }
            long millis1 = System.currentTimeMillis();
            System.out.println("计算所用时间:" + (millis1 - millis)+"毫秒");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值