Java 一个序列的算法

Java 一个序列的算法,java,Java,我试图编写一个JAVA代码来键入这些数字 7、87、387、5387、95387、195387、4195387、64195387、464195387、246195387、62464195387、262464195387、7262464195387、27262464195387、627262464195387、5627262464195387、75627262464195387、575627262464195387、4575627272626262464195387 但当我在netbeans上编写

我试图编写一个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;i
pow(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函数之外,我不能有任何数据类型。这个解释谢谢你的解释