繁体   English   中英

在Java中找到数字的总和

[英]Find the sum of the digits of a number in Java

我是Java的新手,并且为欧拉问题提供了解决方案

public class Problem16{

    public static void main(String[] args){
        System.out.println(DecomposeNumber(PowerDigitSum(1000)));
    }// end main

    public static double PowerDigitSum(double iExposant){
        return Math.pow(2, iExposant);
    }// end PowerDigitSum()

    public static int DecomposeNumber(double iNb){
        int[] intTab = String.valueOf(iNb).chars().map(Character::getNumericValue).toArray();
        int iMax = intTab.length;
        int sum = 0;
            for(int i = 0; i < iMax; i++){
                sum += intTab[i];
            }
            return sum + 1;
    }// end DecomposeNumber()

}// end classe

我不明白我的解决方案适用于较小的数字,例如n ^ 15但不适用于n ^ 1000,我知道它不起作用,因为数字不是完整的数字,但是有一种方法可以假设将1.071509e + 301转换为完整数字?

如果我的问题正确,那么您希望打印出没有科学符号的大字体。 您可以使用String.format()做到这一点。

String stringNumber = String.format("%f", iNb);

虽然其他答案肯定可以解决您的部分问题。 我不建议将double类型用于2 ^ 1000这样的计算。

您问题的答案是利用BigInteger 提示一下,我将为PowerDigitSum方法提供逻辑,在您尝试从中学习时,将其余逻辑PowerDigitSum练习。

函数PowerDigitSum现在变为:

public static BigInteger powerDigitSum(int exponent){
      return BigInteger.TWO.pow(exponent); // 2 ^ exponent
}

请注意,如果您打算继续使用这种方法(希望这样做),那么在DecomposeNumber方法内部的流管道中调用map后,您可以简单地调用.sum()并返回结果,而不是toArray() ,这意味着您无需执行后续循环即可对数字求和。

这是使用BigInteger的实现,没有任何字符串转换。 事实证明,大double值的取模并不比字符串方法好。

请注意,这实际上是字符串转换的基础,没有这种情况下不需要的开销。

int sumDigits(BigInteger number) {
    int sum = 0;

    while (number.compareTo(BigInteger.ZERO) > 0) {
        sum += number.mod(BigInteger.TEN).intValue();
        number = number.divide(BigInteger.TEN);
    }

    return sum;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM