Neumanns Random Generator

Back to Problem Solutions forum

Reschikov     2017-11-19 10:43:31

помогите, проходят числа 0001, 4100, а 5761 никак, на что нужно обратить внимание? как быть если получается трехзначное число? какой смысл добавлять нули впереди числа, если при любой арифмитеческой операции они все равно не учитываются? Или нужно менять систему счисления?

WakeMeAtThree     2017-11-19 12:08:45
User avatar

Hello, I can only understand the Google translate, but if you're having the issue with leading zeroes, it's helpful to think of the numbers 1, 4100, and 5761 as strings "1", "4100", "5761" That way, you can format strings and add leading zeroes like this (I'm guessing you use Java according to your profile):

int number = 1;
String formatted = String.format("%04d", number);

Should make 1 into "0001". Hope this helps, best of luck.

Reschikov     2017-11-19 12:58:31

Спасибо за ответ. но там необходимо выполнить арифметические действия, как умножение, деление, деление по модулю. Эти оперции возможны только с числами. 4100 16810000 168100 8100 65610000 656100 6100 37210000 372100 2100 4410000 44100 4100 4 - совпадает с ответом


5761 33189121 - возведение в степень 331891 - обезание справа двух цифр 1891 === правильно - обезание слева двух цифр и ответ 3575881 35758 5758 === правильно 33154564 331545 1545 2387025 23870 3870 14976900 149769 9769 95433361 954333 4333 18774889 187748 7748 60031504 600315 315 - здесь начали появляться трехзначные цифры и я попробывал работать с десятичной точкой, хотя и без нее ответ не правильный 0.0315 9.9225E-4 992 0.0992 0.00984064 9840 96825600 968256 8256 68161536 681615 1615 2608225 26082 6082 36990724 369907 9907 98148649 981486 1486 2208196 22081 2081 4330561 43305 3305 10923025 109230 9230 85192900 851929 1929 3721041 37210 7210 51984100 519841 9841 96845281 968452 8452 71436304 714363 4363 19035769 190357 357 0.0357 0.00127449 1274 1623076 16230 6230 38812900 388129 8129 66080641 660806 806 0.0806 0.00649636 6496 42198016 421980 1980 3920400 39204 9204 84713616 847136 7136 50922496 509224 9224 85082176 850821 821 0.0821 0.00674041 6740 45427600 454276 4276 18284176 182841 2841 8071281 80712 712 0.0712 0.00506944 5069 25694761 256947 6947 48260809 482608 2608 6801664 68016 8016 64256256 642562 2562 6563844 65638 5638 31787044 317870 7870 61936900 619369 9369 87778161 877781 7781 60543961 605439 5439 29582721 295827 5827 33953929 339539 9539 90992521 909925 9925 98505625 985056 5056 25563136 255631 5631 31708161 317081 7081 50140561 501405 1405 1974025 19740 9740 94867600 948676 8676 75272976 752729 2729 7447441 74474 4474 20016676 200166 166 0.0166 2.7556E-4 275 0.0275 7.5625E-4 756 0.0756 0.00571536 5715 32661225 326612 6612 43718544 437185 7185 51624225 516242 6242 38962564 389625 9625 92640625 926406 6406 41036836 410368 368 0.0368 0.00135424 1354 1833316 18333 8333 69438889 694388 4388 19254544 192545 2545 6477025 64770 4770 22752900 227529 7529 56685841 566858 6858 47032164 470321 321 0.0321 0.00103041 1030 1060900 10609 609 0.0609 0.00370881 3708 13749264 137492 7492 56130064 561300 1300 1690000 16900 6900 47610000 476100 6100 37210000 372100 2100 4410000 44100 4100 16810000 168100 8100 65610000 656100 6100 37210000 372100 2100 4410000 44100 4100 90 принудительная остановка! ошибка!

на каком шаге программа выдает неправильный результат? первые два совпадают с ответами. смысла добавлять нули впереди числа нет никого. при арифметических оперциях они не учитываются.

или надо брать строку перводить в число, возводить в степень, потом снова в строку, тупо в строке убирать/обрезать лишние символы - цифры? Этот что ли алгоритм?

WakeMeAtThree     2017-11-19 13:24:19
User avatar

You finish your arithmetic operations first, then you turn it into a string of eight leading zeros.

1 * 1 = 1

should become

1 * 1 = "00000001" (string with EIGHT digits, leading zeroes included)
        00"0000"01 (call the middle parts of the string)

So then you have to take these four values, and turn them from strings into numbers, and repeat.

"0000" => 0000
0000 * 0000 = "00000000" 
              00"0000"00

The code snippet you actually need is:

int number = 1;
String formatted = String.format("%08d", number);

Alternatively you can post your code here and maybe we can see the problem?

Reschikov     2017-11-19 14:12:40

Судя по вашему ответу, я не совсем понимаю задачу. ну понятно: "0000" - это строка которую считали, а как мы получили число 0000 - в каком исчислении? в десятичном представлении будет просто цифра 0.

int count = 0;
int n = scanner.nextInt();
int result = n;
float repeat = 0;
do {
    if (result < 1000) {
        repeat = (float)result / 10_000;
        System.out.println(repeat);
        repeat *= repeat;
        System.out.println(repeat);
        repeat *= 100;
        result =  (int) (repeat * 10_000);
        System.out.println(result);
    }else{
        result *= result;
        System.out.println(result);
        result /= 100;
        System.out.println(result);
        result %= 10_000;
        System.out.println(result);
    }
    count++;
}while (n != result && repeat != result && count < 90);
System.out.print(count + " ");

Если мы результат возведения в степень переводим в строки, зачем тогда в задании написано: "Подсказка. Чтобы усечь 8-значное значение, разделите его на, 100а затем возьмите остаток деления на 10000."?

Проще тогда работать по индексу со строками, а не делить числа.

Reschikov     2017-11-22 11:10:28

Я конечно извиняюсь, но у меня не получается решение числа 5761 (счетчик > 88) и с использованием строк тоже, как показал WakeMeAtThree 017-11-19 13:24:19. вот мой код:

int count = 0;
String stringNumber = scanner.next();
String string = stringNumber;
int number;
do {
    number = Integer.parseInt(stringNumber);
    number *= number;
    System.out.println(number);
    stringNumber = String.format("%08d", number);
    System.out.println(stringNumber);
    stringNumber = stringNumber.substring(2, 6);
    System.out.println(stringNumber);
    count++;
}while (!string.equals(stringNumber) && Math.sqrt(number) != Integer.parseInt(stringNumber) && count < 90);
System.out.print(count + " ");

В чем проблема, куда обратить внимание, в какую сторону копать? кто укажет?

Reschikov     2017-11-22 12:22:46

все, решил через запись в коллекцию всех промежуточных чисел. всем спасибо

Reschikov     2017-11-22 12:22:46

все, решил через запись в коллекцию всех промежуточных чисел. всем спасибо

Please login and solve 5 problems to be able to post at forum