用Java来实现“找出一定范围内多个连续整数,使其立方之和恰好等于另一个整数的立方”

 

 

中国大学mooc,Java作业题

思路:

累加连续值得立方其实不算太难,有点像排序的方法,双重循环可以实现,这里困住我们的有可能是Java如何来判断一个整数

如何判断一个数是否整数呢

 

这里我并没有用网上所讲的所谓官方的方法,而是自己摸索出来一个小方法,我觉得这样摸索出来的小方法更加能够锻炼到编程的思维。

public class answer {
	public static void main(String[] arg) {
		
		double a,c;
		int b;
		a = Math.pow(27, 1.0/3);
		c = Math.pow(216,1.0/3);
		//c这里比较特别,6*6*6=216,但是反过来的时候,c等于5.99999999999
		if (c%1==0){
			System.out.println(c+"是一个整数");
		}
		else{
			System.out.println(c+"并不是一个整数");
		}
		
		//这里对c进行处理,其实相当于四舍五入,但是不能直接用int来强制转换,这样所有数都会变成整数了
		c = (float)Math.pow(216,1.0/3);
		if (c%1==0){
			System.out.println("处理之后	"+c+"是一个整数");
		}
		else{
			System.out.println(c+"并不是一个整数");
		}
		if (a%1==0){
			System.out.println(a+"是一个整数");
		}
		else{
			System.out.println(a+"并不是一个整数");
		}
		//如果直接用int类型来强制转换,什么数都会变成整数
		b = (int)Math.pow(10, 1.0/3);
		System.out.println("int强制转换后,本来不是整数的都变成整数b = "+b);

		}
}

运行结果:

5.999999999999999并不是一个整数
处理之后    6.0是一个整数
3.0是一个整数
int强制转换后,本来不是整数的都变成整数b = 2

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

这里用了两个数,虽然都是某个整数的3次方,但是反过来的时候216开3次方,并不会等于6,Math.pow( )这个函数返回一个double类型的值,这里也不知道是精度问题还是什么了,先不管。

从上面的小方法我们可以知道,一个数可以用Math.pow(a,b)来开方,其实是也可以用来求次方幂,第一个参数就是你要开方的数,第二个参数就是几次方,当第二个参数的值小于1,就是开方了。

 

开方出来会是一个double类型的数,我们在函数里面定义一个相同类型的来获取返回值。因为216开方问题,我们在前面加上float强制转换,这样会让本来是真正整数的数变回为整数,不是的转不了,这里一定不能用int类型强制转换!

 

出来一个数,要判断是否整数的话,直接对1取模,看看是不是等于0就好了。

 

附上完整代码,有不理解或者有异议的地方,都可以一起研究研究呀


public class test2{
	public static void main(String[] arg) {
	System.out.println("找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立方。");
	//新建一个类的实例
	test2 p = new test2();
	//调用类实例中的方法
	p.verify();
	//Search方法中的参数,就是你搜索的范围,总不能一直做下去吧
	p.Search(500);
	
	}
	//=======================================================================================
	//verify是一个检验方法
	public void verify(){
		int sum = 0;
		System.out.println("\n\n你已经来到了验证函数");
		if ((3*3*3+4*4*4+5*5*5) == (6*6*6))
			System.out.println("3*3*3+4*4*4+5*5*5 = 6*6*6");
		
		for(int m=6;m<70;m++){
			sum+=m*m*m;
			}
		//System.out.println("sum="+sum);
		
		if (sum == (180*180*180))
			System.out.println("6*6*6+7*7*7+....+69*69*69=180*180*180");
		}
	//=======================================================================================
	//查找到更多相关的数,定义前面数的范围为1-200
	public void Search(int max) {
		int sum = 0;
		double x;
		System.out.println("\n\n你已经来到了查找函数");
		for(int m=1;m<=(max-1);m++)
		{
			//保证有连续,不能只是一个数的立方和
			sum = m*m*m;
			for(int n=(m+1);n<=max;n++)
			{
				sum += n*n*n;
				//如果不加float,不能表达出来,如3*3*3+4*4*4+5*5*5再开三次方会变成5.9999
				x = (float)Math.pow(sum, 1.0/3);
				if (x%1==0)
					//开三次方出来是一个整数,直接输出表达式
					System.out.println(m+"*"+m+"*"+m+"+"+(m+1)+"*"+(m+1)+"*"+(m+1)+"+"+"....+"+n+"*"+n+"*"+n+"=="+(int)x+"*"+(int)x+"*"+(int)x);
			}
		}
	}
	
}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值