(7)如何得到所有的 "水仙花数" ?
本程序转载自:如何得到所有的水仙花数
感谢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)如何得到所有的 "水仙花数" ?的更多相关文章
- C语言 · 4-3水仙花数
问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1^3+5^3+3^3. 样例输入 一个满足题目要求的输入范例.例:无 样例输出 ...
- Java程序设计之打印100~999的水仙花数
package printDaffodilNumber; /* * 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身 ...
- 51Nod--1015 水仙花数
51Nod: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1015 1015 水仙花数 基准时间限制:1 秒 空间 ...
- js查找水仙花数
所谓水仙花数是满足类似于153=1³+5³+3³: 第一种方式:把这个数当做字符串来实现 <script> for(var i=100;i<=999;i++) { str_i=i.t ...
- java 实现(代码) -- 水仙花数 + 杨辉三角形
/* 在控制台输出所有的“水仙花数” 水仙花:100-999 在以上数字范围内:这个数=个位*个位*个位+十位*十位*十位+百位*百位*百位 例如:xyz=x^3 +y^3 +z^3 怎么把三位数字拆 ...
- 编写一个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之间的水仙花数是:") ...
- hdu 2010 - 水仙花数
题意: 数学上有个水仙花数,他是这样定义的:"水仙花数"是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3.现在要求输出所有在m和n范围内的水仙花 ...
- C语言与水仙花数
C语言与水仙花数 水仙花数:前提三位数,"个位数的立方"加上"十位数的立方"加上"百位数的立方"恰好等于这个数. 我们来用C语言书写水仙花数 ...
- 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花 数 ",因为153=1的三次方+5的三次方+3的三次方。
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个 "水仙花 数 ", ...
- python练习——水仙花数
题目: 请判断一个数是不是水仙花数.其中水仙花数定义各个位数立方和等于它本身的三位数.输入有多组测试数据,每组测试数据以包含一个整数n(100<=n<1000)输入0表示程序输入结束.输出 ...
随机推荐
- 最牛逼的的shell命令
参考 远程diff [root@jiangyi01.sqa.zmf /home/ahao.mah/ALIOS_QA/tools/iperf] #ssh ahao.mah@dnstest02.tbc c ...
- java socket报文通信(一) socket的建立
TCP是Transfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket之间 ...
- js 等待刷新技术
- Oracle_Q&A_04
2014-12-19作业 [JSU]LJDragon's Oracle course tasks In the first semester, junior year --1.在管理员权限下创建一个新 ...
- (转)Apple Push Notification Services in iOS 6 Tutorial: Part 1/2
转自:http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1 Upda ...
- 添加链接服务器 SQL SERVER
使用sql语句: exec sp_addlinkedserver @server='serverontest',@provider='sqloledb',@srvproduct='',@datasrc ...
- sqlserver 2008 sa登陆的一些问题
sqlserver 2008 sa登陆 无法连接到(local)? 遇到这个问题请确保SQL主服务是开启状态: ok接下来把服务器名换成 计算机名\实例名 再次使用sa登陆,如下: 是不是可以了呢? ...
- Linux下的进程控制块——task_struct
在Linux中具体实现PCB的是 task_struct数据结构,以下实现摘自github 我想说它真的很长很长...... ↓ struct task_struct { volatile long ...
- Python进阶之路---1.5python数据类型-字符串
字符串 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; ...
- Universal-Image-Loader 示例 工具
Base public class MyApplication extends Application { @Override public void onCreate() { ...