您的位置:首页 > 编程语言 > Java开发

Java:找水仙花数。。计算超出2^63-1的数的方案

2016-12-22 16:25 309 查看
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)(百度百科)可以求到long型之内所有的整数,存在一个设想,是否能够求出任意位数的水仙花数(这种表达比较傻),换句话说就是,能不能有一种方案计算超出2^63-1的数。package com.practice;import java.util.List;/*** Created by Administrator on 2016/12/21.*/public class NarcissisticNumber {public static void main(String [] args){int bit = 1;//当前数的位数try {long tink = 100;while(true) {MyList myList = decimalDigit(tink+ "");if(bit!=myList.size()){bit = myList.size();System.out.print("\n"+bit+"位数的水仙花数有:");}if(judge(myList,tink)) System.out.print(tink+"\t");tink++;}}catch (Exception e){System.out.println("已经超出能够计算的范围!");}}/* public static List<Integer> splitNumber(int srcNumber){List<Integer> result = new ArrayList<>();*//*int power = 1;while (true){long divisor = (long)Math.pow(10,power);long remainder = srcNumber%divisor;long consult = srcNumber/divisor;if(consult==0){break;}result.add(remainder);srcNumber = srcNumber/10;power++;}*//*int x = srcNumber/100;//百威int y = (srcNumber-x*100)/10;//十位int z = srcNumber-x*100-y*10;//个位result.add(x);result.add(y);result.add(z);return result;}*/
//判断当前数是否是水仙花数
public static boolean judge(List<Integer> list,long srcNumber){
int length = list.size();
long value =0;
for(int i = 0;i<length;i++){
value += Math.pow(list.get(i),length);
}
if(value == srcNumber) return true;
return false;
}

//把传入的数,转为String,然后用字符数组接收,通过ascii码,转为int,用List获得所有位置上的数及位数
//MyList extends ArrayList,重写了其中的toString();跟ArrayList没什么区别
   public static MyList<Integer> decimalDigit(String srcString){MyList<Integer> result = new MyList();char [] chars = srcString.toCharArray();for(int i=0;i<chars.length;i++){result.add((chars[i]-48));}return result;}}
一个小时计算到十位数3位数的水仙花数有:153 370 371 4074位数的水仙花数有:1634 8208 94745位数的水仙花数有:54748 92727 930846位数的水仙花数有:5488347位数的水仙花数有:1741725 4210818 9800817 99263158位数的水仙花数有:24678050 24678051 885934779位数的水仙花数有:146511208 472335975 534494836 912985153
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 水仙花数