Java 一个序列的算法
我试图编写一个JAVA代码来键入这些数字 7、87、387、5387、95387、195387、4195387、64195387、464195387、246195387、62464195387、262464195387、7262464195387、27262464195387、627262464195387、5627262464195387、75627262464195387、575627262464195387、4575627272626262464195387 但当我在netbeans上编写这段代码时,它并没有给出我想要的序列Java 一个序列的算法,java,Java,我试图编写一个JAVA代码来键入这些数字 7、87、387、5387、95387、195387、4195387、64195387、464195387、246195387、62464195387、262464195387、7262464195387、27262464195387、627262464195387、5627262464195387、75627262464195387、575627262464195387、4575627272626262464195387 但当我在netbeans上编写
public class Sum30 {
public static void main(String[] args) {
double a;
for(double i=2;i<100;i++){
a=7;
a= (pow(3,a)%pow(10,i));
System.out.println(a);
}
}}
公共类Sum30{
公共静态void main(字符串[]args){
双a;
for(double i=2;ipow(3,a)
为大的a
值生成巨大的数字,因此它很快就会(从数学开始。pow(3,87)
)生成超出double
范围(“无穷大”)的值
此外,您的算法完全是基于整数的。您不应该使用浮点数进行计算。尤其是double
的循环索引具有“气味”(即使它在您的情况下有效)
我建议对循环索引使用int
,对a
使用biginger
:
public static void main(String[] args) {
BigInteger a = BigInteger.valueOf(7);
for (int i = 2; i < 100; i++) {
a = (BigInteger.valueOf(3).pow(a.intValue()).mod(BigInteger.valueOf(10).pow(i)));
System.out.println(a);
}
}
这个版本除了可用内存和可用处理时间之外没有限制。pow(3,a)
为大的a
值生成大量的数字,因此它很快就会(从Math.pow(3,87)
开始)生成超出double
范围(“无穷大”)的值
此外,您的算法完全是基于整数的。您不应该使用浮点数进行计算。尤其是double
的循环索引具有“气味”(即使它在您的情况下有效)
我建议对循环索引使用int
,对a
使用biginger
:
public static void main(String[] args) {
BigInteger a = BigInteger.valueOf(7);
for (int i = 2; i < 100; i++) {
a = (BigInteger.valueOf(3).pow(a.intValue()).mod(BigInteger.valueOf(10).pow(i)));
System.out.println(a);
}
}
除了可用内存和可用处理时间之外,此版本没有限制。要克服此类缺陷或错误,请使用biginger
,因为它具有较大的范围并获得精确的值。要克服此类缺陷或错误,请使用biginger
,因为它具有较大的范围并获得精确的值。o循环中的此计算:
a=7;
a= (pow(3,a)%pow(10,i));
所以pow(3,a)总是相同的(2187),因为a总是重置为7。pow(10,1)很快变得比2187大得多,所以模变成2187。我认为你的数学是错误的。你在循环中做这个计算:
a=7;
a= (pow(3,a)%pow(10,i));
所以pow(3,a)总是相同的(2187),因为a总是重置为7。pow(10,1)很快变得比2187大得多,所以模变成2187。我想你的数学是错误的。你得到了什么?指向数学错误的错误数字,或者意外的输出或异常?我假设你正在经历使用double
的精度不足,对于如此大的值,你也应该使用biginger
考虑在循环之前移动<代码> A= 7 的声明-否则您的循环不会产生任何结果。是的,我确实导出了一个类的数学模型,但是除了双PoW函数返回之外,我不能有任何数据类型。您得到了什么?错误的数字指向了一个数学错误,或者意外的输出还是一个异常?由于代码的不精确性,请使用< <代码> BigInteger <代码>。还考虑在循环之前移动<代码> a=7 < /代码>的声明,否则您的循环不会产生任何结果。是的,我输出了一个类的数学模型,但是除了双PoW函数之外,我不能有任何数据类型。这个解释谢谢你的解释