Java杂谈之二----怎样判断一个数是水仙花数以及穷举水仙花数

首先明确一下什么是水仙花数

百度说,水仙花数指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身

例如:1^3+5^3+3^3=153

水仙花数只是自幂数的一种,严格来说三位数的3次幂数才能成为水仙花数。

但其实也分一位自幂数,两位自幂数,三位自幂数,四位自幂数等等。

所以鉴于水仙花数的定义的不确定和模糊性

以下代码示例不仅限于三位数的水仙花数,主要涉及的是思想问题。

类名:JavaNarcissus

构造函数:JavaNarcissus()

判断一个数是否为水仙花数:IsNarcissus()---通过键盘输入,对输入的数据进行分析

判断一个数是否为水仙花数:IsNarcissus(int value)---通过参数传递

列举100-999中的所有水仙花数:enumNarcissus()---注意这边和以上对的都是三位数

列举1-1000中的所有水仙花数(这个说法可能是错误的,但是重要的是思想):enumAllNarcissus()---我使用了两种方法,其实还有一种可以用字符串,就不多写了。

主函数:main()

package JavaTestSelf;

import java.util.Scanner;

//判断一个三位数是水仙花数
//找出1000以内的所有水仙花数
//153?=1^3+5^3+3^3 3次方的3是这个数的位数
public class JavaNarcissus {

	//构造函数
	JavaNarcissus()
	{
		System.out.println("请输入一个三位数:");
	}

	//判断一个三位数是否为水仙花数,通过键盘输入
	public void IsNarcissus()
	{
		Scanner scan = new Scanner(System.in);
		int temp = scan.nextInt();
		if(temp<100||temp>999)
		{
			System.out.println("你输入的不是三位数,请重新输入!");
		}
		else
		{
			int first = temp/100;
			int middle = (temp%100)/10;
			int last = temp%10;
			double result = Math.pow(first, 3)+Math.pow(middle, 3)+Math.pow(last, 3);
			if(result==temp)
			{
				System.out.println(temp + "是水仙花数!");
			}
			else
			{
				System.out.println(temp + "不是水仙花数!");
			}
		}
	}

	//判断一个三位数是否为水仙花数,通过参数传递
	public void IsNarcissus(int value)
	{
		if(value<100||value>999)
		{
			System.out.println("你输入的不是三位数,请重新输入!");
		}
		else
		{
			int first = value/100;
			int middle = (value%100)/10;
			int last = value%10;
			double result = Math.pow(first, 3)+Math.pow(middle, 3)+Math.pow(last, 3);
			if(result==value)
			{
				System.out.println(value+ "是水仙花数!");
			}
		}
	}

	//列举100-999中所有的水仙花数
	public void enumNarcissus()
	{
		for(int i=100;i<1000;i++)
		{
			IsNarcissus(i);
		}
	}

	//列举1-1000中所有的水仙花数
	public void enumAllNarcissus()
	{
//		方法一
//		for(Integer i=1;i<=1000;i++)
//		{
//			double sum = 0;
//			String s = i.toString();
//			int number = s.length();
//			byte[] byteArr = s.getBytes();
//			for(int j=0;j<byteArr.length;j++)
//			{
//				sum += Math.pow((byteArr[j]-48), number);
//			}
//			if(sum == i)
//			{
//				System.out.println(i + "是水仙花数!");
//			}
//		}

//		方法二
		for(Integer i=1;i<=1000;i++)
		{
			int sum=0;
			String s = i.toString();
			int number = s.length();
			for(int j=0;j<number;j++)
			{
				int res = (int)(i/(Math.pow(10, j)))%10;
				sum += Math.pow(res, number);
			}
			if(sum==i)
			{
				System.out.println(sum + "是水仙花数!");
			}
		}
	}

	//main函数
	public static void main(String[] args) {
		JavaNarcissus test = new JavaNarcissus();
		test.IsNarcissus();
		test.enumNarcissus();
		test.enumAllNarcissus();
	}

}

Java杂谈之二----怎样判断一个数是水仙花数以及穷举水仙花数,布布扣,bubuko.com

时间: 2024-08-02 23:02:50

Java杂谈之二----怎样判断一个数是水仙花数以及穷举水仙花数的相关文章

Java基础——使用三元运算符判断一个数的奇偶性

要求: 使用三元运算符判断一个数的奇偶性 实现代码: /** * 使用三元运算符判断用户输入的一个数的奇偶性 */ import java.util.Scanner; public class Odd_even { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个整数:"); long num1 = input.nextLo

Java杂谈三之判断素数以及穷举素数

首先确认下什么是素数,又称质数 百度的定义解答: 质数(prime number)又称素数,有无限个.一个大于1的自然数,如果除了1和它本身 外,不能被其他自然数整除(除0以外)的数称之为素数(质数) 明确了素数的定义后,下面用java来判断素数以及穷举2-999以内的素数,还是一样,主 要看的是对一个数进行判断或者对一组数进行判断的思想,至于怎样判断的,百度的定义已经给了很好的解答思路. JavaPrimeNubmer:类名 enumPrimeNumber():穷举2-999以内的所有素数 m

java判断一个数是否为素数[转]

http://blog.csdn.net/lwcumt/article/details/8027586 import java.util.Scanner; //质数又称素数,是指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数 public class PrimeNumber { public static void main(String[] args) { Scanner scan = new Scanner(System.in);// 扫描器,接收控制台输入信息 Sy

Java 求1-100以内的所有素数,判断一个数是不是素数

质数(prime number)又称素数,有无限个. 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数. 小师弟问了我个这么个联系题,虽然看似简单,但是,大家都觉得简单的东西,没必要分享的话,那初学者,不是很痛苦吗? 所以,我就给小师弟示范了一下.方便初学者,看看怎么写代码. 代码内部的细节(都是针对没开始工作,或者刚刚工作的哥们): 1,模块化思想. 先拆分需求,本来让你求1-100以内的素数,你不能上来就干,先拆分先考虑怎么确定一个数是不是素数,然后再复用到所有.

Java问题记录——循环里的二次判断与状态更新

Java问题记录——循环里的二次判断与状态更新 摘要:本文主要记录了在循环操作时可能出现的问题. 问题重现 在使用循环结构时,如果使用了定时任务,或者代码会多次调用循环结构,可能会导致有些对象会被循环多次. 举例来说,如果有一个结账的代码,每五分钟会执行一次: 1 @Scheduled(cron = "0 0/5 * * * ?") 2 @Async 3 public void handle(){ 4 List<Customer> list = customerDao.li

Java判断一个数是不是快乐数

快乐数的定义: 快乐数(happy number)有以下的特性: 在给定的进位制下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1. 以十进制为例: 2 8 → 22+82=68 → 62+82=100 → 12+02+02=1 3 2 → 32+22=13 → 12+32=10 → 12+02=1 3 7 → 32+72=58 → 52+82=89 → 82+92=145 → 12+42+52=42 → 42+22=20 → 22+02=

一起学 Java 面向对象(二)

一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数只有被调用才会被执行:3> 对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写,系统会帮你自动加上:4> 函数中只能调用函数,不可以在函数内部定义函数. 修饰符 返回值类型 方法名(参数类型 形式参数1,参数类型 形式参数2,..

Java编程练习之判断Java文件名是否正确,判断邮箱格式是否正确和统计指定字符串中某字符现的次数

一判断Java文件名是否正确,判断邮箱格式是否正确 功能:判断Java文件名是否正确,判断邮箱格式是否正确.其中:合法的文件名应该以.java结尾:合法的邮箱名 中至少要包含 "@" , 并要求 "@" 在 "." 之前. 练习代码: public class Test { public static void main(String[] args) { //Java文件名 String fileName = "HelloWorld.j

Java杂谈之正则表达式--日期,邮箱,数字验证

当我们判断数据的格式是否符合规范的时候,一般会采用两种方式: 一种是if...else不断的嵌套或者if...else并排判断的方式 (这两者代表以条件正确为前提还是以条件错误为前提的) 另一种就是正则表示式. 字符串匹配给正则表达式:boolean matches(Stirng regex) 用法:String.matches(regex) 当然可以说if...else是万能的,正则表达式是有局限的,不能过分依赖,它只是解决问 题的一种手段而已,并不是必要的. 但往往用正确的使用正则表达式能让