java水仙花数编程_水仙花数java编程实现

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

定义:水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

题目描述

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。

输入描述:

输入数据有多组,每组占一行,包括两个整数m和n(100 ≤ m ≤ n ≤ 999)。

输出描述:

对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格

import java.util.ArrayList;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

int start = input.nextInt();

int end = input.nextInt();// 系统输入两个整数

ArrayList out = flower(start, end);// 调用方法

if (out.isEmpty()) {// 判断是否为空,按格式输出no。

System.out.println("no");

} else {

for (int i = 0; i < out.size(); i++) {// 按格式输出

if (i != out.size() - 1) {// 最后一个不需要输出空格

System.out.print(out.get(i) + " ");

} else {

System.out.print(out.get(i));

}

}

}

}

public static ArrayList flower(int startNumber, int endNumebr) {

ArrayList flowerNumber = new ArrayList();

int j = 0;

for (int i = startNumber; i < endNumebr; i++) {

/*

* 若满足条件放入数组 条件是分别取出3个位的数的3次方相加==原数

*/

if ((i == Math.pow(Math.floor(i / 100), 3) + Math.pow(Math.floor(i % 100 / 10), 3)

+ Math.pow(i % 100 % 10, 3)) && i >= startNumber && i <= endNumebr) {

flowerNumber.add(i);

}

}

return flowerNumber;// 返回数组

}

}

Java三种求水仙花数的方法

注意:要判断一个三位数是不是水仙花数,得先取得这个三位数的的个位,十位和百位

普通for循环:

import java.util.Scanner;

public class TestNarcissus {

/*

* public static void main(String[] args) {

* int num = 100; int a[] = new int[3];

* System.out.print("3位的水仙花数有:\t");

* while (num <= 999) {

* int sum =0;

* a[0] = num / 100 % 10;

* a[1] = num / 10 % 10;

* a[2] = num % 10;

* for (int i = 0; i < 3; i++) {

* sum = sum + (int) Math.pow(a[i], 3);

* }

* if (num ==sum) {

* System.out.print(num + "\t"); } num++;

* }

* }

*/

public static void main(String[] agrs) {

System.out.print("指定最大位数N:");

Scanner input = new Scanner(System.in);

int N = input.nextInt();

input.close();

for (int i = 3; i <= N; i++) {

int a[] = new int[i];

int num = (int) Math.pow(10, i - 1) + 1;

System.out.print(i + "位的水仙花数有:\t");

while (num <= Math.pow(10, i)) {

int sum = 0;

for (int j = 0; j < i; j++)

a[j] = (int) (num / Math.pow(10, j) % 10);

for (int j = 0; j < i; j++)

sum = sum + (int) Math.pow(a[j], i);

if (num == sum)

System.out.print(num + "\t");

num++;

}

System.out.print("\n");

}

}

}

while循环:

public class Daffodil {

public static void main(String args[]){

int i=100;

int count=0; //定义水仙花数的个数

while(i<10000){

int b = i/100; //取得百位数

int s = (i-100*b)/10; //取得十位数

int g = (i-s*10-b*100); //取得个位数

if(i==g*g*g+s*s*s+b*b*b){ //水仙花数判定

System.out.print(i+" "); //输出符合条件的数

count++;

}

i+=1;

}

System.out.println();

System.out.println("水仙花数总共有"+count+"个"); //输出水仙花数的总数

}

}

do-while循环:

public class Daffodil {

public static void main(String args[]){

int i=100;

int count=0; //定义水仙花数的个数

do{

i+=1;

int b = i/100; //取得百位数

int s = (i-100*b)/10; //取得十位数

int g = (i-s*10-b*100); //取得个位数

if(i==g*g*g+s*s*s+b*b*b){ //水仙花数判定

System.out.print(i+" "); //输出符合条件的数

count++;

}

}while(i<10000);

System.out.println();

System.out.println("水仙花数总共有"+count+"个"); //输出水仙花数的总数

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值