本程序转载自:如何得到所有的水仙花数

感谢Android_iPhone(日知己所无),preferme(冰思雨)等人;

package test;

import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; /**
* 找出所有的水仙花数
* 判断一个数是否为水仙花数:一个N位整数,其各位数字的N次方的和等于该数本身
*
* @author preferme (冰思雨)
*
*/
public class ShuiXianHuaTree { public static final SimpleDateFormat SDF = new SimpleDateFormat(
"yyyy-MM--dd HH:mm:ss.SSS");
public static final BigInteger EndPoint = new BigInteger(
"115132219018763992565095597973971522402");
private static final BigInteger Poison = new BigInteger("-1"); private static class CompareThread extends Thread {
private BlockingQueue<BigInteger> numbers; public CompareThread(BlockingQueue<BigInteger> queue) {
numbers = queue;
} public void run() {
BigInteger number = BigInteger.ZERO;
try {
while ((number = numbers.take()) != Poison) {
if (isNarcissisticNumber(number)) {
System.out.println(SDF.format(new Date()) + "\t"
+ number);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} private static final BigInteger[][] Powers = new BigInteger[40][10];
static {
for (int i = 0; i < 40; i++) {
for (int j = 0; j < 10; j++) {
Powers[i][j] = BigInteger.valueOf(j).pow(i);
}
}
} public static boolean isNarcissisticNumber(final BigInteger number) {
BigInteger sum = BigInteger.ZERO; // 各位数字的N次方的和
char[] digitArray = number.toString(10).toCharArray(); // 各位数字的数组
for (char digit : digitArray) {
sum = sum.add(Powers[digitArray.length][digit - '0']);
}
return sum.compareTo(number) == 0;
} public static void main(String[] args) throws InterruptedException {
BlockingQueue<BigInteger> queue = new LinkedBlockingQueue<BigInteger>(
1000);
CompareThread[] pool = new CompareThread[Runtime.getRuntime()
.availableProcessors()];
for (int i = 0; i < pool.length; i++) {
pool[i] = new CompareThread(queue);
pool[i].setPriority(Thread.MIN_PRIORITY);
pool[i].start();
}
System.out.println("水仙花数列表");
for (BigInteger number = BigInteger.ZERO; number.compareTo(EndPoint) <= 0; number = number
.add(BigInteger.ONE)) {
queue.put(number);
}
}
}

(7)如何得到所有的 "水仙花数" ?的更多相关文章

  1. C语言 · 4-3水仙花数

    问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1^3+5^3+3^3. 样例输入 一个满足题目要求的输入范例.例:无 样例输出 ...

  2. Java程序设计之打印100~999的水仙花数

    package printDaffodilNumber; /* * 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身 ...

  3. 51Nod--1015 水仙花数

    51Nod:  http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1015   1015 水仙花数 基准时间限制:1 秒 空间 ...

  4. js查找水仙花数

    所谓水仙花数是满足类似于153=1³+5³+3³: 第一种方式:把这个数当做字符串来实现 <script> for(var i=100;i<=999;i++) { str_i=i.t ...

  5. java 实现(代码) -- 水仙花数 + 杨辉三角形

    /* 在控制台输出所有的“水仙花数” 水仙花:100-999 在以上数字范围内:这个数=个位*个位*个位+十位*十位*十位+百位*百位*百位 例如:xyz=x^3 +y^3 +z^3 怎么把三位数字拆 ...

  6. 编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print

    package zuoye; public class print { void output() { System.out.println("100-999之间的水仙花数是:") ...

  7. hdu 2010 - 水仙花数

    题意: 数学上有个水仙花数,他是这样定义的:"水仙花数"是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3.现在要求输出所有在m和n范围内的水仙花 ...

  8. C语言与水仙花数

    C语言与水仙花数 水仙花数:前提三位数,"个位数的立方"加上"十位数的立方"加上"百位数的立方"恰好等于这个数. 我们来用C语言书写水仙花数 ...

  9. 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花 数 ",因为153=1的三次方+5的三次方+3的三次方。

    题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个 "水仙花 数 ", ...

  10. python练习——水仙花数

    题目: 请判断一个数是不是水仙花数.其中水仙花数定义各个位数立方和等于它本身的三位数.输入有多组测试数据,每组测试数据以包含一个整数n(100<=n<1000)输入0表示程序输入结束.输出 ...

随机推荐

  1. 简单干净的C# MVC设计案例:BrothersDropdownList()

    团队切换器 在/Teams/Details?id=xxx的页面,有这样一个控件,使得不需要回到/Teams/Index就能轻松切换团队: 由于这种团队切换控件比比皆是,比如在团队故事板中(以及其他地方 ...

  2. 查看db2表空间使用率

    select char(TABLESPACE_NAME,16) tablespace_name,decimal(PAGE_SIZE/1024,4,2) page,used_pages*100/usab ...

  3. AngularJS和ReactJS对比

    Angular的特点: 优势: AngularJS是一套完整的框架,angular有自带的数据绑定.render渲染.angularUI库,过滤器,$filter,$directive(模板),$se ...

  4. RequireJS 2.0 新特性

    就在前天晚上RequireJS发布了一个大版本,直接从version1.0.8升级到了2.0.随后的几小时James Burke又迅速的将版本调整为2.0.1,当然其配套的打包压缩工具r.js也同时升 ...

  5. Javascript:DOM动态创建元素实例应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. POJ3692 Kindergarten 【最大独立集】

    Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5317   Accepted: 2589 Desc ...

  7. C#逻辑运算符详解

    代码如下: namespace ConsoleApplication1 { class @class { static void Main_1(string[] args) //输出用户输入的内容 { ...

  8. <a>标签中href="javascript:;"

    javascript: 是一个伪协议,其他的伪协议还有 mail:  tel:  file:  等等. 1 <a id="jsPswEdit" class="set ...

  9. WPF之Binding的使用

    引出: 在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件 ...

  10. Ajax (jquery)实现智能提示搜索框(in Django)

    搜索框输入搜索名字,从数据库中筛选名字, 如果有包含输入的字母的名字则以json格式返回并且显示在搜索框下:          html文件: <!DOCTYPE html> <ht ...