求N位数的所有自然回归数(水仙花数)
2011-09-10 12:48
363 查看
/** * 求N位数的所有水仙花数。 * 例如: N = 3, 即求从100至999之间的所有水仙花数。 * 水仙花数:153 = 1^3 + 5^3 + 3^3; */ public class NarcissusNumber { //水仙花数的各位数字 private byte[] number; //水仙花数的位数 private int bitsN; //改水仙花数的值,即各位数字代表的十进制值 private long value; //各位数字的N次方表 public final long[] powerList; public NarcissusNumber(int bitsN) { this.bitsN = bitsN; number = new byte[bitsN]; //赋初值,一位的话,从1开始;2位的话,从10开始。 if(bitsN == 1) { this.value = 0; number[0] = 0; }else { number[number.length-1]=1; for(int i=number.length-2; i>=0; i--) { number[i] = 0; } this.value = (long)Math.pow(10, bitsN-1); } //初始化N次方表 powerList = new long[10]; for(int i = 0; i < 10; i++) { powerList[i] = (long) Math.pow(i, bitsN); } } /** * 将当前水仙花数加1。 * 自增成功后返回true,若溢出返回false; */ public boolean increment() { int bitIndex = 0; for(int bitResult = 1; bitIndex < bitsN; bitIndex++) { bitResult = number[bitIndex] + bitResult; if(bitResult > 9) { number[bitIndex] = (byte) (bitResult % 10); bitResult = bitResult / 10; }else { number[bitIndex] = (byte) bitResult; break; } } if(bitIndex < bitsN) { this.value++; return true; }else { this.value=0; return false; } } /** * 求出所有的水仙花数。 */ public void getAllNumbers() { do { if(isNarcissusNumber()) { System.out.print(this.value+"\t"); /*System.out.print("["); for(int i = number.length-1; i >= 0; i--) { System.out.print(powerList[number[i]]+" "); } System.out.print("]\t"); */ } } while (increment()); } /** * 判断当前的数是否是水仙花数。 */ public boolean isNarcissusNumber() { long sum = 0; for(int i = 0; i < number.length; i++) { sum += powerList[number[i]]; } return sum == this.value; } public static void main(String[] args) { for(int i=4; i < 10; i++) { System.out.println("================ n = " + i +"================="); NarcissusNumber nn = new NarcissusNumber(i); nn.getAllNumbers(); System.out.println("\n================ n = " + i +"=================\n"); } } }
相关文章推荐
- (c++)打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。
- 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
- 找出所有三位数中的水仙花数
- 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
- 2. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=1^3+5^3+3^3.
- 3.7.1 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
- 求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。
- 【程序3】打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身
- 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。
- 求100---999之间的所有水仙花数,并输出。提示:水仙花数是一个3位数的自然数,该数各位数的立方和等于该数本身
- 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
- c程序:打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身
- C#源代码—编写一个程序求出所有的“水仙花数”。“水仙花数”是指一个3位数,其各位数字的立方和恰好等于该数本身。例如153=1*1*1+5*5*5+3*3*3,所以153是“水仙花数”。
- 42.编写程序打印所有的“水仙花数”。“水仙花数”指一个三位数,其各位数字立方和等于该数本身,例如153是一个“水仙花数”,因为 153=1×1×1+3×3×3+5×5×5。
- 输出0~999之间的所有“水仙花数”ps:“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身
- 07_计算三位数中的所有“水仙花数”
- 求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身
- java所有N位数之内的自幂数(3位数的自幂数也叫水仙花数)
- 7--打印所有的“水仙花数”。所谓的“水仙花数”,是指一个三位数, 其各位数字的立方和等于该数本身的。
- 【程序13】 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数