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

求水仙花数
小弟编写一个求水仙花数的程序,但是就是求不出来
 希望各位都来帮忙看看哪里不对
package project1;

public class Class2 {
public static void main(String[] args) {
  int a,b,c,d;
  d=100;
  for(d=100;d<1000;d=d+1){
  a=d/100;
  b=(d-a*100)/10;
  c=d-a*100-b*10;
  if (d==a*a*a+b*b*b+c*c*c);
  System.out.println(d);
  }
}
}

------解决方案--------------------

if (d==a*a*a+b*b*b+c*c*c);
那个分号去掉试试
------解决方案--------------------
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)


public class 水仙花数 {
public static void main(String[] args){
int num=100;//水仙花数最少是三位数
for(int i=99;i<num;i++,num++){
if(i<999){
//分解个十百位
int bai=num/100;
int shi=(num%100)/10;
int ge=num%10;
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==num)
System.out.println("该水仙花数是三位数:"+num);
}
if(i<9999){
//分解个十百千位
int qian=num/1000;
int bai=(num%1000)/100;
int shi=(num%100)/10;
int ge=num%10;
if(ge*ge*ge*ge+shi*shi*shi*shi+bai*bai*bai*bai+qian*qian*qian*qian==num)
System.out.println("该水仙花数是四位数:"+num);
}
if(i<99999){
//分解个十百千万位
int wan=num/10000;
int qian=(num%10000)/1000;
int bai=(num%1000)/100;
int shi=(num%100)/10;
int ge=num%10;
if(ge*ge*ge*ge*ge+shi*shi*shi*shi*shi+bai*bai*bai*bai*bai+qian*qian*qian*qian*qian+wan*wan*wan*wan*wan==num)
System.out.println("该水仙花数是四位数:"+num);
}
if(i>=100000){
System.out.println("十万之后的就不算了,和写法是和上面一样的,不过太耗电脑了哈,呵呵");
break;
}
}
}

}

------解决方案--------------------
楼主啊,给你个建议哈,虽然你的if语句后面只有一条语句,但是那个"{}"我不建议你省略不写,要养成规范编码的好习惯,就像是上面的代码,你在if语句的后面用";"结尾了,结果if语句的判断在分号之前就结束了,所以你打印不出哈!
------解决方案--------------------
public class ShuiXianHua {
public static void main(String[] args) {
Long num = Long.parseLong(args[0]);
if(num <100 || num > Integer.MAX_VALUE){
System.out.println("only support [100," + Integer.MAX_VALUE + "]");
return;
}
char[] nums = null;
String s = "";
for(int i = 100;i<=num;i++){
s = i + "";
nums = s.toCharArray();
int sum = 0;
for(int k = 0;k<nums.length;k++){
sum += Math.pow(Integer.parseInt(nums[k]+""), nums.length);
}
if(sum == i){
System.out.println("get one:"+sum);
}
}
}
}

这个可以,你任意给个大于等于100小于int的最大值的正整数x,将得到所有的[100,x]的水仙花
------解决方案--------------------
/**
* 根据传入的数字范围查询之间的水仙花数
* @param e
* @param f
*/
public static void printWater(int e,int f)
{
int b= 0;//获取百位数的变量
int c=0;
int d=0;
int i=0;//临时变量
System.out.println("你要找的水仙花数为: ");
for (int a = e; a <=f; a++) {
b = a / 100; //百位
c = (a / 10) % 10;//十位
d = a % 100 % 10;//个位
if (a == b * b * b + c * c * c + d * d * d) {
System.out.println(a);
i++;
}
}
System.out.println("你找的水仙花个数为:" + i);



}
这个是我以前面试的时候遇到的!
------解决方案--------------------
Java code

/**
* 根据传入的数字范围查询之间的水仙花数
* @param e
* @param f
*/
public static void printWater(int e,int f)
{
int b= 0;//获取百位数的变量
int c=0;
int d=0;
int i=0;//临时变量
System.out.println("你要找的水仙花数为: ");
for (int a = e; a <=f; a++) {
b = a / 100; //百位
c = (a / 10) % 10;//十位
d = a % 100 % 10;//个位
if (a == b * b * b + c * c * c + d * d * d) {
System.out.println(a);
i++;
}
}
System.out.println("你找的水仙花个数为:" + i);



}