日期:2014-05-20  浏览次数:20777 次

关于求一范围内所有水仙花数的问题
自己编写了一段代码如下,不知道错在哪儿,显示不出结果,求指点:


import java.util.*;
import static java.lang.Math.*;

public class NarcissusTest {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

System.out.println("输入一个位数大于等于3的正整数,以显示出该数字范围内的所有水仙花数:");
String num = in.nextLine();

long ln = Integer.parseInt(num);
if (ln<100)
System.out.println("非法输入!");

ArrayList<Double> k = new ArrayList<Double>();
long sum = 0;

for (int i=100;i<=ln;i++) {

String str1 = ""+i;
int str1_n = str1.length();
boolean flag = true;

for (int j=0;j<str1_n;j++) {
char ch = str1.charAt(j);
String str2 = "" + ch;
k.add(Double.parseDouble(str2));
sum += pow(k.get(j),str1_n);
}
if (sum != i) {
flag = false;
break;
}
if (flag)
System.out.print(i+",");

}
}

}

------解决方案--------------------
             // 计算数字i中每一位的立方和
            for (int n : bits) {
                sum += n * n * n;
            }

换成
             // 计算数字i中每一位的立方和
            for (int n : bits) {
                sum += (int)Math.pow(n, bits.size());
            }

------解决方案--------------------
虽然我们老师严禁贴代码,但是参考别人的代码是可以的,不过最后自己还是要动手写才好

public class ShuiXianHua {
public static void main (String[] args) {
qiuShuXianHua();
}

public static int qiuShuXianHua() {


for(int i = 100; i < 1000; i++){
int a = i % 10 ;
int b = (i / 10) % 10 ;
int c = (i / 100) % 10;
int s = (int) (Math.pow(a,3) + Math.pow(b,3) + Math.pow(c,3));
if(s == i)
   System.out.println(i);

}
return -1;
}
}