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

感谢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. 创建git repo

    http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository Getting a Git Repository You can get ...

  2. [小知识] 获取浏览器UA标识

    这个随笔纯粹是小知识的积累,以后都会打上小知识的标签. 经常见的,下载移动app时,只有一个二维码,但扫码后,会根据手机是iphone还是android下载不同app,下面就是这个操作的代码: < ...

  3. [Android开发常见问题-14] Unexpected namespace prefix "abc" found for tag SomeThing

    很多开发者朋友可能会自己定义一些控件,以此来扩展现有控件的功能,在扩展空间的时候通常会自己定义一些属性,例如: [html]  view plain copy   <android.alex.v ...

  4. HDOJ1251-统计难题(trie树入门)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...

  5. 利用ESLint检查代码质量

    1. ESLint ESLint 是一个插件化的 javascript 代码检测工具,它可以用于检查常见的 JavaScript 代码错误,也可以进行代码风格检查,这样我们就可以根据自己的喜好指定一套 ...

  6. solr创建新的Core

    1.  在example目录下创建taotao-solr文件夹: 2.  将./solr下的solr.xml拷贝到taotao-solr目录下: 3.  在taotao-solr下创建taotao目录 ...

  7. Linux系统 fdisk命令 创建新分区

    --fdisk命令fdisk -l /dev/sda           # 查看分区 fdisk    /dev/sda           # 创建分区  n                    ...

  8. 网站项目后台的目录命名为admin后,网页莫名其妙的变样了

    这是我的第一篇博客文章,与其说是分享经验,倒不如说是求助 最近因为要完成一个课程设计,在拿一个现成的项目过来改,要用到select下拉菜单,可是发觉怎么我的这个下拉菜单怎么变样了 刚开始它是这样的 感 ...

  9. Linux 开机报 or type Control-D to continue

    解决步骤: 1.输入root密码 2.看是哪个盘报的错,我这边是sda3(可能会是不同的盘),就是代码中标为FAIL 输入以下命令fsck -y /dev/sda3

  10. easyui之combobox(不定时补充)

    1,combobox的valuefeild和textfeild这两个属性,可以理解为键值对,即:键valuefeild:值textfeild textfeild是文本框内显示的值,如果要取文本框内的值 ...