亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

找出數字之間的阿姆斯特朗數

找出數字之間的阿姆斯特朗數

慕少森 2021-08-19 16:37:37
下面是我的代碼。package com.ofss.java.examples;import java.util.Scanner;class ArmstrongNumber {    public static void main(String[] args) {        int c = 0, a;        int n1, n2;//Range in which armstrong number need to find        Scanner s = new Scanner(System.in);        System.out.println("Enter the first number");        n1 = s.nextInt();        System.out.println("Enter the second number");        n2 = s.nextInt();        for (int i = n1; i <= n2; ++i) {            while (i > 0) {                a = i % 10;                System.out.println(a);                i = i / 10;                System.out.println(i);                c = c + (a * a * a);                System.out.println(c);            }            if (i == c)                System.out.println(c + "armstrong number");            else                System.out.println(c + "Not armstrong number");        }    }}執行后我得到不正確的結果。代碼無限運行,直到你停止它。它必須打印 151-154 之間的數字(armstrong 為 153)。此外,它錯誤地將 153 打印為不是 Armstrong 數字。...是一個數字,它是它自己的數字之和,每個數字都增加到數字的冪次方。
查看完整描述

3 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

您不應該更改,i因為這也用于


for (int i = n1; i <= n2; ++i) 

或者您可能永遠不會退出該循環,因為您希望i在第一次迭代結束時為負。很難增加直到達到n2。


使用不同的變量來i安全地跟蹤。


    int j = i;

    while(j > 0) ...

關于阿姆斯壯數:


阿姆斯特朗數是一個數,它是它自己的數字之和,每個數字都增加到數字的冪次方


您需要將每個數字的數字長度(數字的數量)的冪。


153 = 1^3 + 5^3 + 3^3

1634 = 1^4 + 6^4 + 3^4 + 4^4

這是它的方法:


public static boolean isArmstrongNumber(int number){

    int power = Integer.toString(number).length(); //just to get the number of digit...


    int tmp = number;

    int digit , sum = 0;


    while(tmp > 0){

        digit = tmp % 10;

        sum += Math.round(Math.pow(digit , power));

        tmp /= 10;

    }


    return sum == number;

}

使用這個從 0 到 10.000 的檢查給出:


0 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474


與維基百科相同:


自戀數字的基數為 10 的序列開始:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, ...


請注意,使用方法可以消除c在您的情況下忘記重置變量的風險。糾正這個會給你更多“正確”的結果(以及 3 位數的結果)


您還可以使用 less 數學來讀取數字并使用char[],請記住,您需要減去'0'value 才能獲得字符的數值:


public static boolean isArmstrongNumber(int number){

    char[] digits = Integer.toString(number).toCharArray();


    int power = digits.length;

    int sum = 0;


    for(char c : digits){

        int digit = c - '0';

        sum += Math.round(Math.pow(digit, power));

    }


    return sum == number;

}


查看完整回答
反對 回復 2021-08-19
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

公共類 ArmstrongNumber {


private final int n1, n2;


public ArmstrongNumber(int n1, int n2) {

    this.n1 = n1;

    this.n2 = n2;

}


protected static boolean isArmstrong(int n) {

    if(n < 0)

        return false;


    int remaining=n;

    int sumCube=0;


    while (remaining>0) {


        int d = remaining % 10;

        sumCube += cube(d);

        remaining /= 10;

    }


    return n == sumCube;

}


private static int cube(int d) {

    return d*d*d;

}


public Integer[] find() {


    List<Integer> results = new ArrayList<>();


    for (int i = n1; i <= n2; ++i)

    {


        if (isArmstrong(i))

            results.add(i);

    }


    return results.toArray(new Integer[0]);

}

}


查看完整回答
反對 回復 2021-08-19
  • 3 回答
  • 0 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號