论坛首页 Java企业应用论坛

关于雷劈数的Java实现

浏览 3173 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-22   最后修改:2011-04-22
雷劈数:有位叫卡普利加的印度数学家。他在一次旅行中,遇到猛烈的暴风雨,电闪雷鸣过后,他看到路边一块牌子,被雷电劈成了两半,一半上写着30,另一半写着25。这时,卡普利加的脑中忽然发现了一个绝妙的数学关系:30+25=55 55^2=3025,把劈成两半的数加起来,再平方,正好是原来的数字。按照第一个发现者的名字,这种怪数被命名为“卡普利加数”或“雷劈数”。

package com.gzitc.plnum;

public class Demon {
	/**
	 * isDemo(long num)判断参数num是否为雷劈数
	 * @param num
	 * @return
	 */
	public boolean isDemon(long num) {
		
		//num1、num2是分出来的数
		long num1,num2,t_num;
		
		String ts = String.valueOf(num);
		int length = ts.length();
		
		//负数
		if(ts.startsWith("-")) {
			return false;
		}
		
		//位数小于两位
		if(ts.length() < 2) {
			return false;
		}
		
		//奇数位
		if(length % 2 != 0) {
			return false;
		}
		
		num1 = Long.parseLong(ts.substring(0,length/2));
		num2 = Long.parseLong(ts.substring(length/2,length));
				
		t_num = num1 + num2;
		
		if(t_num * t_num == num) {
			return true;
		} else {
			return false;
		}
		
	}
	
	public static void main(String args[]) {
		Demon d = new Demon();
		for(long i = 10; i < 999999999; i++) {
			if(d.isDemon(i)) {
				System.out.print(i+"  ");
			}
		}
	}
}
   发表时间:2011-04-23  
这个雷劈数确实有意思。
0 请登录后投票
   发表时间:2011-04-26  
有点意思哈
0 请登录后投票
   发表时间:2011-04-26  
你这个方法好像缺少55*55=3025 “3025”="30"+"25"的验证
0 请登录后投票
   发表时间:2011-04-29  
加瓦人生 写道
你这个方法好像缺少55*55=3025 “3025”="30"+"25"的验证


运行结果:
81  2025  3025  9801  494209  998001  24502500  25502500 ……
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics