java实现简单算法(二)-Armstrong数(枚举法)

题目描述:在n位的整数中,例如153可以满足1^3 + 5^3 + 3^3 = 153,这样的数称之为Armstrong数。将所有的Armstrong数按小到大排序,试写出一程序找出n位数以下的所有Armstrong数,网上大多数是已知位数求确定位数下的Armstrong数,本题在此基础上提高了一定的难度。
解题思路:其实网上已经有很多关于本题解法的文章,大部分采用的是枚举法。具体代码如下,欢迎建议和意见。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
*
* 作者: RobotHaptic
* 日期: 2015.08.14
* 功能:求n位数以下的所有Armstrong数,并输出
*
*/

public class ArmstrongNum {
public ArmstrongNum(){
}

/**
 * 枚举法
 * 求n位数以下的所有Armstrong数,也就是10的(n+1)次幂以下的数
 */
public void getAllArmstrongNum1(int n){

    //从1开始到10的n次幂
    for(int i = 1; i < (int) Math.pow(10, n); i++){

        //sum表示一个i位数等于其个位数的i次方之和,i小于等于n。
        int sum = 0;

        //把每个数查分成i个个位数,放在数组里
        int[] mun = new int[n];

        //获得当下查询值
        int thisNum = i; 

        //j为当下查询值的位数
        int j = 0;

        //得到一个存放当下数每位上的数的数组mun
        while (thisNum > 0){
            mun[j] = thisNum % 10;
            thisNum = thisNum / 10;
            ++j;
        }

        //求得sum
        for(int k = 0; k < n; k++){
            sum = sum + (int)Math.pow(mun[k], j);
        }

        //如果i属于Armstrong数,则输出,以一个空格为间隙。
        if(i == sum){
            System.out.print(i + " ");
        }
    }
}

public static void main(String[] args) throws Exception, IOException {
    // TODO Auto-generated method stub
    ArmstrongNum armstrongNum = new ArmstrongNum();
    System.out.print("求n位数以下的Armstrong数,请先输入n的值:\n");

    //输入n
    int n = Integer.parseInt(new BufferedReader
            (new InputStreamReader(System.in)).readLine());

    //得到n位数以下的所有Armstrong数
    armstrongNum.getAllArmstrongNum1(n);
}

}

求n位数以下的Armstrong数,请先输入n的值:
5
1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值