在一个非常强大的数字计划中没有得到预期的产出

时间:2015-02-12 06:50:30

标签: java numbers

import java.util.Scanner;

class arm
{
    public static void main(String args[])
    {
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter the lower number");
    long l=scan.nextLong();
    System.out.println("Enter the upper number");
    long u=scan.nextLong();

    System.out.println("The armstrong numbers in this range are");
    long t=l;
    while(t<u)
    {
        long hold=t;
        long ram=0;
        long f=0;
        long multiplier=0;
        while(hold>0)
        {
            ram=hold%10;
            hold=hold-ram;
            hold=hold/10;
            ram=multiplier;
            ram=ram*multiplier;
            ram=ram*multiplier;


            f=f+ram;
        }
        if(f==t)
        System.out.print(t+" ");
        t++;
    }
}
}

例如:如果输入为1和999,则输出为 1 153 370 371 407

这是我编写的程序,用于打印给定范围内的数字是非常强的数字,为什么它不起作用?

仅供参考,阿姆斯特朗号码是一个与其数字立方体总和相同的数字,因此371 =(3 ^ 3)+(7 ^ 3)+(1 ^ 3)= 27 + 343 + 1 = 371

如果您想了解更多详情,请告诉我。

2 个答案:

答案 0 :(得分:1)

您的第ram = multiplier行导致错误。 您可以执行此操作而不是该行和ram = ram * multiplier line

f = f + ram *ram *ram; 

说明:f包含总和。 ram包含最后一位数字。你必须得到所有数字的立方体的总和。您提取所有数字,找到他们的多维数据集(ram * ram *ram)并将其添加到f

答案 1 :(得分:0)

正如我在评论中发布的,这是我根据维基百科中描述的formula检查Narcissistic(Armstrong)号码的版本:

以下是完整代码:

import java.util.ArrayList;
import java.util.Scanner;


public class StackOverflow {


    public static void main (String[] args){
        getNarcisist();
    }

    public static void getNarcisist(){
        System.out.println("Insert lowest number");
        Scanner lower = new Scanner(System.in);
        Long lowestNum  = lower.nextLong();
        System.out.println("Insert highest number");
        Scanner highest = new Scanner(System.in);
        Long highestNum = highest.nextLong();
        highest.close();
        lower.close();
        ArrayList<Long> list = new ArrayList<Long>();

        for(long i=lowestNum+1;i<highestNum;i++){
            list.add(i);
        }

        for(Long checkedNumber : list) {
            int length = String.valueOf(checkedNumber).length();
            long[] digitsRepresentation = new long[length];
            int i=0;
            Long temp = checkedNumber;
            while(temp>0) {
                long digit = (temp%10);
                temp = temp/10;
                digitsRepresentation[i]=digit;
                i++;
            }

            System.out.println("Now is checkin number: "+checkedNumber);
            if(checkedNumber == calculateNarcisist(digitsRepresentation)) {
            System.out.println("Found narcisist number: "+checkedNumber);
            } 
        }


    }

    public static long calculateNarcisist(long[] input){
        long sum=0;

        for (int i=0; i<input.length;i++){
            double pow = input.length;
            double narcisistSum = Math.pow((double)input[i], pow);
            sum +=narcisistSum;
        }
        return sum;
    }
}

这个程序,计算两个输入数字之间的范围(不包括),获取范围内每个数字的数字,并计算阿姆斯特朗总和,如果它找到任何数字,其中阿姆斯特朗总和等于检查数,则打印它是屏幕。