一种21位水仙花数算法思路

上传人:宝路 文档编号:21430984 上传时间:2017-11-23 格式:DOC 页数:2 大小:124.06KB
返回 下载 相关 举报
一种21位水仙花数算法思路_第1页
第1页 / 共2页
一种21位水仙花数算法思路_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《一种21位水仙花数算法思路》由会员分享,可在线阅读,更多相关《一种21位水仙花数算法思路(2页珍藏版)》请在金锄头文库上搜索。

1、这里我主要是换个思路,穷举这个数中的每个位置上的数字的总数。从一开始,我们假设共有该数中存在 9 个 9,我们将这个数的信息存到几个特定的数组中去:Java 代码 1. private int countArray = new int10; / 个数列表 2. private int countSumArray = new int10; / 个数总数 3. private BigInteger sumArray = new BigInteger10;/ 值总数 4. private int offset = 0;/ 浮标 countArray 记录依次从 9 到 0 每个数的个数,countS

2、umArray 是 countArray 中的各个数与其之前所有数的个数的总和(即 countSumArrayn=countSumArrayn-1+countNum),sumArray 是当前数的总值(即 sumArrayn=sumArrayn-1+num)。offset 是浮标,即当前判定的数的位置 我们对该个数进行判断,9 个 9 后面还有 12 位数,那么 9 个 9 最小就是 9 个 9 的平方+12 个 0 的平方,最大是 9 个 9 的平方+12 个 8 的平方。我们从以下三个方面来判断:1. 最小值不大于 9999999999999999999992. 最大值不小于 100000

3、0000000000000003. 最大值与最小值从首部是否相同的部分,如 777700000000000000000 与777799999999999999999,存在 7777 相同的部分,如果该相同的部分中有某个数的个数大于 offset 中相同的值的个数,那么该值也判定为失败还有一个很重要的判断就是,如果 countSumArray 中对应的 offset 中的值为 21,那么即所有的位数都有值,那么直接判定如果该值=其各个位置上的数的 21 次方之和,如果不等返回失败,反之,这个数就是要求的数。 总体判断如上所述,如果失败我们即查询下一个数 next(),countSumArrayoffset=21,那么就是查到头了,就返回查找 back()。用到了几个技巧,就是将 BigInteger 的运算结果直接存储到 hashtable 中去,可以节约大量运算时间。题中给予了 4 分钟的时间,以为很需要一段时间,就设置了多线程,后来发现,不使用多线程也只要花费 2 秒种,多线程的意义也就不复存在了。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号