Armstrong Number - 阿姆斯特朗数

1. 第一个版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.*;
import java.math.*;

//寻找阿姆斯特朗数
public class LookforNumber
{

public Scanner scanner = new Scanner(System.in);

public static void main(String[] args){
LookforNumber ln = new LookforNumber();
ln.number();
}

public void number(){//计算三位,四位,五位的阿姆斯特朗数
System.out.println("这是在求阿姆斯特朗数(n=3时,为水仙花数):");
System.out.println("请输入要求数的位数:");
int n = scanner.nextInt();
int a=0,b=0,c=0,d=0,e=0;
int x = (int)Math.pow(10,n-1);
int y = (int)Math.pow(10,n);
for(;x<y;x++){
for(int z=1;z<=n;z++){
switch(z){
case 1 : a = x/(int)Math.pow(10,n-z);break;
case 2 : b = x/(int)Math.pow(10,n-z)%10;break;
case 3 : c = x/(int)Math.pow(10,n-z)%10;break;
case 4 : d = x/(int)Math.pow(10,n-z)%10;break;
case 5 : e = x/(int)Math.pow(10,n-z)%10;break;
default : break;
}
}
if(x == (int)Math.pow(a,n)+(int)Math.pow(b,n)+(int)Math.pow(c,n)
+(int)Math.pow(d,n)+(int)Math.pow(e,n)){
System.out.print(x + " ");
}
}
System.out.println();
System.out.println("上述都是阿姆斯特朗数。");
}
}

2. 第二个版本

第二个版本是在第一个版本的基础上进行优化的,不懂的话,可以首先看第一个版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Scanner;

public class FlowerTest {
public Scanner scanner = new Scanner(System.in);

public static void main(String[] args){
FlowerTest ln = new FlowerTest();
ln.number();
}

public void number(){//计算三位,四位,五位的阿姆斯特朗数
System.out.println("这是在求阿姆斯特朗数(n=3时,为水仙花数):");
System.out.println("请输入要求数的位数:");
int n = scanner.nextInt();
int x = (int)Math.pow(10,n-1);//数的最小值
int y = (int)Math.pow(10,n);//数的最大值

for(;x<y;x++){//对每一个数进行选择
int num=0;
for(int z=1;z<=n;z++){//选取数字的每一位
num = num + (int)Math.pow(x/(int)Math.pow(10,n-z)%10,n);
}
if(x == num){//比对数与计算后的值是否相等
System.out.println(x + " 该数是阿姆斯特朗数!");
}
}
}
}