java 我试图创建一个通用程序来检查给定的数是否是阿姆斯特朗数,但我无法找到为什么我的sum值为0 [已关闭]

yrdbyhpb  于 2023-01-11  发布在  Java
关注(0)|答案(3)|浏览(97)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
看第32行,假设我给程序的值是153,这确实是阿姆斯特朗数,那么第32行的sum的值一定是153,但不管输入是什么,它总是显示0。

import java.util.*;
import java.lang.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        {
            System.out.println("For which condition you want to check the condition!");
            int check = input.nextInt();
            isArmstrong(check);
        }
    }

    static void isArmstrong(int num)
    {
        int sum = 0;
        int count = 0;
        int demo = num;
        while (demo > 0) {
            int firstPart = demo / 10;
            int lastPart = demo - (firstPart * 10);
            count++;
            demo = firstPart;
        }
        System.out.println("total number of digits in the provided number are"+count);
        while (demo > 0) {
            int firstPart = demo / 10;
            int lastPart = demo - (firstPart * 10);
            sum = sum + (int)Math.pow(lastPart,count);
            demo = firstPart;
        }
        System.out.println("value of sum is "+sum);
        if(sum==num)
        {
            System.out.println(num+" is an armstrong number");
        }
        else {
            System.out.println(num+" is not an armstrong number");
        }
    }
}

我想知道我能做些什么来确保,代码中sum的值,能显示出,它实际上是什么,才能成为阿姆斯特朗数。

w8biq8rn

w8biq8rn1#

您需要在计算数字后将num重新分配给demo

static void isArmstrong(int num)
    {
        int sum = 0;
        int count = 0;
        int demo = num;
        while (demo > 0) {
            int firstPart = demo / 10;
            int lastPart = demo - (firstPart * 10);
            count++;
            demo = firstPart;
        }
        
        // this line was missing
        demo=num;
        
        System.out.println("total number of digits in the provided number are"+count);
            while (demo > 0) {
                int firstPart = demo / 10;
                int lastPart = demo - (firstPart * 10);
                sum = sum + (int)Math.pow(lastPart,count);
                demo = firstPart;
            }
        System.out.println("value of sum is "+sum);
            if(sum==num)
            {
                System.out.println(num+" is an armstrong number");
            }
            else {
                System.out.println(num+" is not an armstrong number");
            }
    }
hvvq6cgz

hvvq6cgz2#

在查找数字位数时,您正在修改复制的源值(demo)。因此,在开始验证之前(在第二个while循环之前),您需要再次将源值重新分配给demo。
因此,在第二个while循环之前添加下面这行代码。

while (demo > 0) {
        int firstPart = demo / 10;
        int lastPart = demo - (firstPart * 10);
        count++;
        demo = firstPart;
    }
    System.out.println("total number of digits in the provided number are"+count);

    demo = num; // add this line

    while (demo > 0) {
        int firstPart = demo / 10;
        int lastPart = demo - (firstPart * 10);
        sum = sum + (int)Math.pow(lastPart,count);
        demo = firstPart;
    }

希望这有帮助!

efzxgjgh

efzxgjgh3#

首先,问题是在计算完位数之后,您没有将num重新分配给demo
但这里有一个更简单的方法来做到这一点。

for (int i = 1; i < 10_000; i++) {
    if (isArmstrong(i)) {
        System.out.printf("%d is an Armstrong number.\n", i);
    }
}

印刷品

  • log10函数返回参数中的位数
  • 然后,在n > 0执行以下操作时循环:
  • 使用余数%运算符获取最后一位数字
  • 将该位数提升到位数
  • 然后除以10以暴露下一数字。
  • 根据比较结果返回真或假。
public static boolean isArmstrong(int num) {
    int save = num;
    int sum = 0;
    int power = (int) Math.log10(num)+1;
    while (num > 0) {
        sum += Math.pow(num % 10, power);
        num /= 10;
    }
    return save == sum;
}

相关问题