在Java中查找数字的位数之和
我是Java新手,我为一个Euler问题想出了一个解决方案
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转换为完整的数字
# 1 楼答案
而另一个答案肯定解决了你的部分问题。我不建议将
double
类型用于2 ^ 1000
这样的计算你的问题的答案是利用^{} 。作为提示,我将提供
PowerDigitSum
方法的逻辑,剩下的逻辑将作为练习,您将尝试从中学习函数
PowerDigitSum
现在变成:注意,如果您打算继续使用这种方法(我希望您会这样做),那么在
DecomposeNumber
方法内的流管道中调用map
之后,您可以简单地调用.sum()
并返回结果而不是toArray()
,这意味着您不需要执行后续的循环来求和数字# 2 楼答案
如果我答对了你的问题,你想打印一个没有科学记数法的大双精度。您可以使用
String.format()
来实现这一点# 3 楼答案
下面是一个使用BigInteger和无字符串转换的实现。事实证明,大双精度值的模并不比字符串方法好
请注意,这实际上是字符串转换的基础,没有本例中不需要的开销