我试图让Neumans随意

时间:2016-10-16 22:05:53

标签: java

import java.util.Scanner;

public class NeumannsRandomGenerator {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter cases:");
        int cases = in.nextInt();
        int iterations = 0;
        for (int i = 0; i <= cases; i++) {
            int a = in.nextInt();
            int res = ((a * a) / 100) % 10000;
            if(res == a){
                iterations++;
            }
            do {
                int b = ((res * res) / 100) % 10000;
                iterations++;
                b = res;
            } while (a != res);
            System.out.println(iterations);
        }
    }
}

我试图想象Neumans随机发生器 例如:

5761 - 让它成为第一个数字 5761 * 5761 = 33189121 - 提高功率2
33(1891)21 =&gt; 1891年 - 截断以获得中间

1891年 - 它是序列中的第二个数字
1891 * 1891 = 3575881 - 上升到2(加上前导零到8位)
03(5758)81 =&gt; 5758 - 截断以获得中间

5758 - 它是序列中的第三个数字(依此类推......)

请帮助我为什么没有得到任何结果:(

1 个答案:

答案 0 :(得分:0)

我不知道迭代的规则,你的号码被填充为0315.如果填充值为00099225,结果数字为992,那么这将是一个良好的开端。我也没有看到你重新生成的规则,所以它只是递归。

我很快就这样做了,所以这里可能会有一些不必要的代码

public int getNeumansRandomNumber(int starting) {

    int nsquared = (int) Math.pow(starting, 2);
    int length = String.valueOf(nsquared).length();

    if (length < 8) {
        String zeroPad = "00000000";
        String padded = zeroPad.substring(length) + nsquared;
        System.out.println("padded="+padded);
        nsquared = Integer.valueOf(padded);
    }
    int middle = (nsquared % 1000000) / 100;
    System.out.println(middle);
    return getNeumansRandomNumber(middle);
}

参考文献:123