Java怎么样求水仙花数呢

喻强强 2014-05-30 08:31:29
书上的练习题,自己不会做,在网上复制别人的代码的,自己不理解,而且出现很多错误!
/*

需求:打印出1~10000范围中的所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数立方和等于该数本身。
思路:1,水仙花数是一个三位数,所以设置三个变量,
2,这三个变量的立方相加等于这三个变量自由组合的数字。
步骤:1,定义三个变量a,b,c.这三个变量为整数。
2,a的立方+b的立方+c的立方=abc,acb,bac,bca,cab,cba.
*/
/*
public class Test01{
public static void main(String arg[])
{
for(int x=100;x<10000;x++)
if(isNumber(x))
System.out.println(x+"is Number");
}
static Boolean isNumber(int x)
{
int i,j,k;
i=x/100;
j=(x-i*100)/10;
k=x%10;
if(x==i*i*i+j*j*j+k*k*k)
return true;
else
return false;
}
}
153,370,371,407,这个只把三位数算在里面了,还把1000.1001算在里面啦!为什么没有显示4位数的水仙花数。
*/

/*
public class Test01{
public boolean fun(int i) {
int s = 0;
int n = (i + "").length();
for (int k = 1; k <= n; k++) {
int t1 = (int) (i / Math.pow(10, k - 1));
int t2 = (int) Math.pow((t1 % 10), n);
s += t2;
}
if (s == i) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
Test sub = new Test();
for (int a = 100; a <= 999999999; a++) {
if (sub.fun(a)) {
System.out.println(a + "是水仙花数");
}
}
}
}
*/
...全文
4288 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
n位数的水仙花数
public class Narcissistic{

	public static boolean narcissistic(int num){
		boolean flag = false;
		int n=0, sum=0, copy=num;
		n = (num+"").length();
		for(int i=0; i<n; i++){
			sum += (int)Math.pow(num%10, n); 
			num /= 10;
		}
		if(sum == copy)
			flag = true;
		return flag;
	}

	public static void main(String args[]){
		for(int i = 0; i<=99999; i++){
			if(narcissistic(i))
				System.out.print(i+" ");
		}
	}
}
百曉生 2014-08-04
  • 打赏
  • 举报
回复
引用 26 楼 u012724379 的回复:
我见过的一种说法是:一个N位整数,其各位数字的N次方的和等于该数本身(N >= 3)
,这才是水仙花数
Coder_D 2014-08-04
  • 打赏
  • 举报
回复
数学上是不是规定0没有0次幂
  • 打赏
  • 举报
回复
/**
 * 打印出1~10000范围中的所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数立方和等于该数本身。
 * @author lenovo
 *
 */
public class TestNarcissus {
    
	static int result = 0;
	static int unit=0;//各位
	static int decade = 0;//十位
	static int hunder = 0;//百位
	 public static int  accountNumber(int a,int b,int c){
		 result = a*a*a+b*b*b+c*c*c;
		 return result;
	 }
	 public static boolean Calculation(int toCal){
		 hunder = toCal/100;
		 decade = (toCal-100*hunder)/10;
		 unit = toCal - 100*hunder-10*decade;
		 if(toCal==accountNumber(hunder, decade, unit)){
			return true; 
		 }
		 return false;
	 }
	 public static void main(String[] args){
		 for(int i = 1;i<10000;i++){
			 if(Calculation(i)){
				 System.out.println(i);
			 }
		 }
	 }
}
喻强强 2014-08-04
  • 打赏
  • 举报
回复
谢谢啦,真犀利!!
日知己所无 2014-07-19
  • 打赏
  • 举报
回复
引用 26 楼 u012724379 的回复:
[quote=引用 24 楼 Android_iPhone 的回复:] [quote=引用 20 楼 u012724379 的回复:] [quote=引用 8 楼 Android_iPhone 的回复:]
0到底算不算是呢[/quote] 一个N位整数,其各位数字的N次方的和等于该数本身 0是1位整数,各位数字的1次方的和为0,等于该数本身 (0^1) == 0[/quote] 我见过的一种说法是:一个N位整数,其各位数字的N次方的和等于该数本身(N >= 3)[/quote] 哦,也有可能有这种说法吧,原来的定义参考了维基百科,应该算是比较权威的
-江沐风- 2014-07-19
  • 打赏
  • 举报
回复
引用 24 楼 Android_iPhone 的回复:
[quote=引用 20 楼 u012724379 的回复:] [quote=引用 8 楼 Android_iPhone 的回复:]
0到底算不算是呢[/quote] 一个N位整数,其各位数字的N次方的和等于该数本身 0是1位整数,各位数字的1次方的和为0,等于该数本身 (0^1) == 0[/quote] 我见过的一种说法是:一个N位整数,其各位数字的N次方的和等于该数本身(N >= 3)
伴雨随风 2014-07-19
  • 打赏
  • 举报
回复
引用 28 楼 u011636482 的回复:
[quote=引用 8 楼 Android_iPhone 的回复:]

import java.math.*;
import java.util.*;

public class NarcissisticNumber {

    public static void main(final String[] args) {
        System.out.println("水仙花数列表");
        for (BigInteger bigInteger = new BigInteger("0");
                !bigInteger.equals(new BigInteger("115132219018763992565095597973971522402"));
                bigInteger = bigInteger.add(new BigInteger("1"))) {
            if (isNarcissisticNumber(bigInteger)) {
                System.out.println(getDateTime() + "\t" + bigInteger);
            }
        }
    }

    /**
     * 判断一个数是否为水仙花数:一个N位整数,其各位数字的N次方的和等于该数本身
     *
     * @param number
     * @return 当输入的参数为水仙花数时返回true,否则返回false
     */
    public static boolean isNarcissisticNumber(final BigInteger number) {
        BigInteger sumOfDigitPower = new BigInteger("0"); // 各位数字的N次方的和
        char[] digitArray = number.toString().toCharArray(); // 各位数字的数组
        for (char digit : digitArray) {
            sumOfDigitPower = sumOfDigitPower.add( // 求和
                    BigInteger.valueOf(
                            Character.digit(digit, 10) // 各位数字
                    ).pow(digitArray.length) // N次方
            );
        }
        return sumOfDigitPower.equals(number);
    }

    /**
     * @return 返回包含当前日期和时间的字符串
     */
    public static String getDateTime() {
        Calendar calendar = Calendar.getInstance();
        return ""
                + calendar.get(Calendar.YEAR) + "/"
                + (calendar.get(Calendar.MONTH) + 1) + "/"
                + calendar.get(Calendar.DATE) + " "
                + calendar.get(Calendar.HOUR_OF_DAY) + ":"
                + calendar.get(Calendar.MINUTE) + ":"
                + calendar.get(Calendar.SECOND) + ":"
                + calendar.get(Calendar.MILLISECOND);
    }
}
运行结果:
水仙花数列表
2014/6/7 18:3:12:297	0
2014/6/7 18:3:12:323	1
2014/6/7 18:3:12:324	2
2014/6/7 18:3:12:324	3
2014/6/7 18:3:12:324	4
2014/6/7 18:3:12:324	5
2014/6/7 18:3:12:324	6
2014/6/7 18:3:12:324	7
2014/6/7 18:3:12:325	8
2014/6/7 18:3:12:325	9
2014/6/7 18:3:12:329	153
2014/6/7 18:3:12:336	370
2014/6/7 18:3:12:336	371
2014/6/7 18:3:12:337	407
2014/6/7 18:3:12:353	1634
2014/6/7 18:3:12:398	8208
2014/6/7 18:3:12:402	9474
2014/6/7 18:3:12:613	54748
2014/6/7 18:3:12:689	92727
2014/6/7 18:3:12:689	93084
2014/6/7 18:3:13:484	548834
2014/6/7 18:3:15:395	1741725
2014/6/7 18:3:19:467	4210818
2014/6/7 18:3:28:652	9800817
2014/6/7 18:3:28:857	9926315
2014/6/7 18:3:53:991	24678050
2014/6/7 18:3:53:992	24678051
2014/6/7 18:5:45:778	88593477
2014/6/7 18:7:28:62	146511208
2014/6/7 18:17:30:115	472335975
2014/6/7 18:19:24:537	534494836
2014/6/7 18:31:6:765	912985153
上面是前32个水仙花数 对于10进制数来讲,地球上总共有89个水仙花数,最大的是115132219018763992565095597973971522401 由于没有“矿机”,想用个人电脑把所有水仙花数都打出来还是有一定难度的
2-9是水仙花数么 表吓我[/quote] 好吧 我错了 是N次方啊
伴雨随风 2014-07-19
  • 打赏
  • 举报
回复
引用 8 楼 Android_iPhone 的回复:

import java.math.*;
import java.util.*;

public class NarcissisticNumber {

    public static void main(final String[] args) {
        System.out.println("水仙花数列表");
        for (BigInteger bigInteger = new BigInteger("0");
                !bigInteger.equals(new BigInteger("115132219018763992565095597973971522402"));
                bigInteger = bigInteger.add(new BigInteger("1"))) {
            if (isNarcissisticNumber(bigInteger)) {
                System.out.println(getDateTime() + "\t" + bigInteger);
            }
        }
    }

    /**
     * 判断一个数是否为水仙花数:一个N位整数,其各位数字的N次方的和等于该数本身
     *
     * @param number
     * @return 当输入的参数为水仙花数时返回true,否则返回false
     */
    public static boolean isNarcissisticNumber(final BigInteger number) {
        BigInteger sumOfDigitPower = new BigInteger("0"); // 各位数字的N次方的和
        char[] digitArray = number.toString().toCharArray(); // 各位数字的数组
        for (char digit : digitArray) {
            sumOfDigitPower = sumOfDigitPower.add( // 求和
                    BigInteger.valueOf(
                            Character.digit(digit, 10) // 各位数字
                    ).pow(digitArray.length) // N次方
            );
        }
        return sumOfDigitPower.equals(number);
    }

    /**
     * @return 返回包含当前日期和时间的字符串
     */
    public static String getDateTime() {
        Calendar calendar = Calendar.getInstance();
        return ""
                + calendar.get(Calendar.YEAR) + "/"
                + (calendar.get(Calendar.MONTH) + 1) + "/"
                + calendar.get(Calendar.DATE) + " "
                + calendar.get(Calendar.HOUR_OF_DAY) + ":"
                + calendar.get(Calendar.MINUTE) + ":"
                + calendar.get(Calendar.SECOND) + ":"
                + calendar.get(Calendar.MILLISECOND);
    }
}
运行结果:
水仙花数列表
2014/6/7 18:3:12:297	0
2014/6/7 18:3:12:323	1
2014/6/7 18:3:12:324	2
2014/6/7 18:3:12:324	3
2014/6/7 18:3:12:324	4
2014/6/7 18:3:12:324	5
2014/6/7 18:3:12:324	6
2014/6/7 18:3:12:324	7
2014/6/7 18:3:12:325	8
2014/6/7 18:3:12:325	9
2014/6/7 18:3:12:329	153
2014/6/7 18:3:12:336	370
2014/6/7 18:3:12:336	371
2014/6/7 18:3:12:337	407
2014/6/7 18:3:12:353	1634
2014/6/7 18:3:12:398	8208
2014/6/7 18:3:12:402	9474
2014/6/7 18:3:12:613	54748
2014/6/7 18:3:12:689	92727
2014/6/7 18:3:12:689	93084
2014/6/7 18:3:13:484	548834
2014/6/7 18:3:15:395	1741725
2014/6/7 18:3:19:467	4210818
2014/6/7 18:3:28:652	9800817
2014/6/7 18:3:28:857	9926315
2014/6/7 18:3:53:991	24678050
2014/6/7 18:3:53:992	24678051
2014/6/7 18:5:45:778	88593477
2014/6/7 18:7:28:62	146511208
2014/6/7 18:17:30:115	472335975
2014/6/7 18:19:24:537	534494836
2014/6/7 18:31:6:765	912985153
上面是前32个水仙花数 对于10进制数来讲,地球上总共有89个水仙花数,最大的是115132219018763992565095597973971522401 由于没有“矿机”,想用个人电脑把所有水仙花数都打出来还是有一定难度的
2-9是水仙花数么 表吓我
日知己所无 2014-07-18
  • 打赏
  • 举报
回复
引用 21 楼 zhouchongzxc 的回复:
0^0 == 1 != 0
(0^1) == 0
日知己所无 2014-07-18
  • 打赏
  • 举报
回复
引用 20 楼 u012724379 的回复:
[quote=引用 8 楼 Android_iPhone 的回复:]
0到底算不算是呢[/quote] 一个N位整数,其各位数字的N次方的和等于该数本身 0是1位整数,各位数字的1次方的和为0,等于该数本身 (0^1) == 0
EndOfJuly 2014-07-18
  • 打赏
  • 举报
回复
public static void main(String[] args) {
		int a,b,c,s;
		for(int i = 100; i <= 999; i++){
			a = i / 100;
			b = i % 100 / 10;
			c = i % 10;
			s = a*a*a + b*b*b + c*c*c;
			if(i == s){
				System.out.println(i);
			}
		}
	}
linhu007 2014-07-16
  • 打赏
  • 举报
回复
public class shuixian { public static void main(String args[]) { shuixianhua sxh = new shuixianhua(); } } class shuixianhua { private int a, b, c, d, sum; public shuixianhua(){ for(a=100; a<1000; a++){ b = a/100; c = (a-b*100)/10; d = a%10; sum = b*b*b + c*c*c + d*d*d; if(sum == a) System.out.println(a); } } }
业余草 2014-07-16
  • 打赏
  • 举报
回复
引用 8 楼 Android_iPhone 的回复:

import java.math.*;
import java.util.*;

public class NarcissisticNumber {

    public static void main(final String[] args) {
        System.out.println("水仙花数列表");
        for (BigInteger bigInteger = new BigInteger("0");
                !bigInteger.equals(new BigInteger("115132219018763992565095597973971522402"));
                bigInteger = bigInteger.add(new BigInteger("1"))) {
            if (isNarcissisticNumber(bigInteger)) {
                System.out.println(getDateTime() + "\t" + bigInteger);
            }
        }
    }

    /**
     * 判断一个数是否为水仙花数:一个N位整数,其各位数字的N次方的和等于该数本身
     *
     * @param number
     * @return 当输入的参数为水仙花数时返回true,否则返回false
     */
    public static boolean isNarcissisticNumber(final BigInteger number) {
        BigInteger sumOfDigitPower = new BigInteger("0"); // 各位数字的N次方的和
        char[] digitArray = number.toString().toCharArray(); // 各位数字的数组
        for (char digit : digitArray) {
            sumOfDigitPower = sumOfDigitPower.add( // 求和
                    BigInteger.valueOf(
                            Character.digit(digit, 10) // 各位数字
                    ).pow(digitArray.length) // N次方
            );
        }
        return sumOfDigitPower.equals(number);
    }

    /**
     * @return 返回包含当前日期和时间的字符串
     */
    public static String getDateTime() {
        Calendar calendar = Calendar.getInstance();
        return ""
                + calendar.get(Calendar.YEAR) + "/"
                + (calendar.get(Calendar.MONTH) + 1) + "/"
                + calendar.get(Calendar.DATE) + " "
                + calendar.get(Calendar.HOUR_OF_DAY) + ":"
                + calendar.get(Calendar.MINUTE) + ":"
                + calendar.get(Calendar.SECOND) + ":"
                + calendar.get(Calendar.MILLISECOND);
    }
}
运行结果:
水仙花数列表
2014/6/7 18:3:12:297	0
2014/6/7 18:3:12:323	1
2014/6/7 18:3:12:324	2
2014/6/7 18:3:12:324	3
2014/6/7 18:3:12:324	4
2014/6/7 18:3:12:324	5
2014/6/7 18:3:12:324	6
2014/6/7 18:3:12:324	7
2014/6/7 18:3:12:325	8
2014/6/7 18:3:12:325	9
2014/6/7 18:3:12:329	153
2014/6/7 18:3:12:336	370
2014/6/7 18:3:12:336	371
2014/6/7 18:3:12:337	407
2014/6/7 18:3:12:353	1634
2014/6/7 18:3:12:398	8208
2014/6/7 18:3:12:402	9474
2014/6/7 18:3:12:613	54748
2014/6/7 18:3:12:689	92727
2014/6/7 18:3:12:689	93084
2014/6/7 18:3:13:484	548834
2014/6/7 18:3:15:395	1741725
2014/6/7 18:3:19:467	4210818
2014/6/7 18:3:28:652	9800817
2014/6/7 18:3:28:857	9926315
2014/6/7 18:3:53:991	24678050
2014/6/7 18:3:53:992	24678051
2014/6/7 18:5:45:778	88593477
2014/6/7 18:7:28:62	146511208
2014/6/7 18:17:30:115	472335975
2014/6/7 18:19:24:537	534494836
2014/6/7 18:31:6:765	912985153
上面是前32个水仙花数 对于10进制数来讲,地球上总共有89个水仙花数,最大的是115132219018763992565095597973971522401 由于没有“矿机”,想用个人电脑把所有水仙花数都打出来还是有一定难度的
高手在人间啊
u014392535 2014-07-16
  • 打赏
  • 举报
回复
原理是这样的你先输入一个m(三位数自己随意设定a1a2a3)——>把m除100取得千位(a1=m/100),然后取模得十位(a2=m%100%10),a1=m%10。取出来后判断是否符合你要求的不就好了。原理懂了代码很简单的
愤飞的小鸭 2014-07-16
  • 打赏
  • 举报
回复
ChongQingJin28 2014-07-16
  • 打赏
  • 举报
回复
0^0 == 1 != 0
-江沐风- 2014-07-16
  • 打赏
  • 举报
回复
引用 8 楼 Android_iPhone 的回复:
0到底算不算是呢
Lirzyn 2014-07-16
  • 打赏
  • 举报
回复

public class Test3 {

	/**
	 * 题目:打印出所有的 "水仙花数 ",
	 * 所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
	 * 例如:153是一个 "水仙花数 ",
	 * 因为153=1的三次方+5的三次方+3的三次方。
	 */
	
	static int num1;
	static int num2;
	static int num3;
	
	public static void main(String[] args) {
		Test3.showInfo(1000);
		
	}

	public static void showInfo(int n)
	{
		for(int sum=101; sum<n; sum++)//三位数,100不可能是
		{
			num1 = sum / 100;//第一位
			num2 = sum % 100 / 10;//求余,两位,除10小数点左移,得第二位
			num3 = sum % 10;//求余,一位,得第三位
			if((num1*num1*num1 + num2*num2*num2 + num3*num3*num3) == sum)
			{
				System.out.println(sum+"是一个水仙花数"); 
			}
		}
	}
}
  • 打赏
  • 举报
回复
引用 17 楼 qq695181966 的回复:
核心代码:


	int i;
        static final int MAX = X;// (X填写你要寻找的水仙花数的范围)
	int a,b,c;
	for(i=0;i<=X;i++)
	{
		a=pow(i/100,3);//百位~
		b=pow((i%100)/10,3);//十位!
		c=pow((i%10),3);//个位`
		if((a+b+c)==i)
		{
			System.out.println("The Flower number is " + i);
		}
	}
说明一下 java.Math.pow(double x , double y );表示的是x的y次方 刚才直接在编辑栏写的 定义的变量类型错了 你自己改一下就OK了
加载更多回复(14)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧