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(); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。