Java实现输出100到999之间所有水仙花数
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。例如:13+53+3^3=153。
需求:在控制台输出所有的“水仙花数”,水仙花数必须满足以下两个要求:
1.水仙花数是一个三位数。
2.水仙花数的个位、十位、百位的数字立方和等于原数。
实现该算法的总体思路为构造一个For循环,对100到999之间所有的三位整数进行遍历,同时在每一次循环中判断该数是否符合水仙花数的要求,符合则输出该数,不符合则不输出。
判断一个三位整数是否为水仙花数的方法为分别提取该数的个位、十位、百位存放进ge、shi、bai三个变量之中,再将三个变量的立方和存入变量sum中,最后利用一个If条件判断语句对其进行判断,判断条件为sum的值是否等于i,即该三位整数的个位、十位、百位的数字立方和是否等于原数。
其主要代码如下
package ljh.mask.shuixianhua;
public class ShuiXianHua {
public static void main(String[] args) {
//水仙花数。需求:在控制台输出所有的“水仙花数”,水仙花数满足以下两个要求
//1.水仙花数是一个三位数
//2.水仙花数的个位、十位、百位的数字立方和等于原数
int ge,shi,bai; //定义一个变量用来存放个位、十位、百位
int sum; //定义一个变量用来存放个位、十位、百位的立方和
for (int i = 100;i <= 999;i++)
{
ge = i % 10; //对输入的三位数进行对10取余,可以得到改三位数的个位,并将其存入变量ge
shi = i / 10 % 10; //对三位数先除以10,因为是整型数据所以会舍弃小数部分得到一个两位的整数,再对其对10取余可得到三位数的十位
bai = i / 100; //让该三位数除以100,即可得到该数的百位
sum = (ge*ge*ge) + (shi*shi*shi) + (bai*bai*bai);
if (sum == i) //判断个位、十位、百位的立方和是否等于原数
System.out.println(i);
}
System.out.println("已输出所有水仙花数");
}
}
同时对于水仙花数还做了一点小扩展。
需求变更为:输入一个三位整数,判断其是否为水仙花数,是则输出该三位整数为水仙花数;否则输出该三位整数不是水仙花数。
其主要代码如下:
package ljh.mask.shuixianhua;
import java.util.Scanner;
//需求:从键盘输入一个三位整数,判断其是否为一个水仙花数
public class ShuiXianHuaDemo2 {
public static void main(String[] args) {
System.out.println("请输入一个三位整数:");
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
int ge,shi,bai,sum;
ge = i % 10; //对输入的三位数进行对10取余,可以得到改三位数的个位,并将其存入变量ge
shi = i / 10 % 10; //对三位数先除以10,因为是整型数据所以会舍弃小数部分得到一个两位的整数,再对其对10取余可得到三位数的十位
bai = i / 100; //让该三位数除以100,即可得到该数的百位
sum = (ge*ge*ge) + (shi*shi*shi) + (bai*bai*bai);
if (sum == i) //加入一个If语句用于判断从键盘输入的数是否为一个水仙花数
System.out.println("该三位整数为一个水仙花数");
else
System.out.println("该三位整数不是一个水仙花数");
System.out.println("判断结束");
}
}
以上就是关于水仙花数的全部内容 ,代码小白还请各位大佬批评指正。