С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 3

Больше, чем лонг

20.10.2011, 23:18. Показов 3111. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго вечера.

В интернетах наткнулся на задачки "от ведущих программистов хедхантер", которыми они заманивают на свой курс лекций. Впрочем, это их дело, а мне захотелось проверить, что помню, потому как Джаву мы изучали кое-как. Задачка такая:
Если мы возьмем 47, перевернем его и сложим, получится 121 - палиндром. Найдите количество положительных натуральных чисел меньших 13554 таких, что из них нельзя получить палиндром за 50 или менее применений описанной операции.
Пока остановился на таком этапе:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class PalProcess {
    static int usl_counter; //счетчик по условию
    public static void start(int param) {
        String temp_string;
        short fl=1; //флаг палиндрома
        int i=0,j=0;
        Long numb= new Long(param); //исходное число
        Long temp= new Long(0); //перевернутое число
        Long summary= new Long(0); //результат
        for (int k=0;k<50;k++) {
        fl=1;
        summary=numb;
        System.out.print(k+" "+numb+" + ");
        while (numb>0) {
            temp*=10;
            temp+=numb%10;
            numb/=10;
        }
        summary+=temp;
        System.out.println(temp+" = "+summary);
        //распознавание палиндрома
        temp_string=summary.toString();
        for (i = 0, j = temp_string.length() - 1; i < j; i++, j--) {
               if (temp_string.charAt(i) != temp_string.charAt(j)) {
                   fl=0;
                   break;
               }
        }
        if (fl==1) {
            System.out.println("Это палиндром");
            break;
        }
        numb=summary;
        temp= new Long(0);
        }
        if (fl==0) usl_counter++;
        }
}
Как параметр param передаю счетчик цикла от 0 до 13554. Само собой, есть ситуации, при которых разрядов в long недостаточно для операндов. Что предпринимают в данном случае? Или есть более эффективное решение этой задачи?

Спасибо за внимание.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.10.2011, 23:18
Ответы с готовыми решениями:

Мягкий лонг-клик по кнопке с таймером
Гуру, подскажите. Есть ли ПРОСТОЕ и готовое решение для такого?? Есть: Обычная Button увеличивает параметр/счетчик на +1. ...

Вычислить произведение значений, которые меньше чем -1 или больше, чем 4
Вычислить произведение значений, которые меньше чем -1 или больше, чем 4.

Вычислить сумму и количество отрицательных элементов массива, которые больше чем b и меньше чем a
Требуется помощь в написании программы по обработке одномерного массива в Delphi. Условие: Обчислить сумму и количество отрицательных...

3
 Аватар для Daemon025
382 / 330 / 159
Регистрация: 06.12.2010
Сообщений: 894
21.10.2011, 00:28
Если я правильно понял, то:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Test {
    int count;
    int x;
    boolean palindrom = false;
 
    Test(int x) {
        this.x=x;
        count=0;
    }
 
    public int reverse(int y) {
        int rx=0;
 
        while(y>0) {
           rx=rx*10+(y % 10);
           y /= 10;
           count++;
        }
        return rx;
    }
 
    public void do_it() {
        int tmp = x+reverse(x);
        count++; 
 
        if(tmp == reverse(tmp) && count <= 50) 
            palindrom = true;
        else 
            palindrom = false;   
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
    public static void main(String[] args) {
        Test test;
        int count = 0;
 
        for(int i=0; i<=13554; i++) {
            test = new Test(i);        
            test.do_it();
 
            if(test.palindrom)
                count++;
        }
  
        
        System.out.println("Count~ "+count);  
    }
}
0
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 3
21.10.2011, 14:54  [ТС]
Daemon025, не совсем, результат работы этого кода соответствует моему за одну итерацию (строка 10). А вот распознавание палиндорома здесь быстрее.
Суть в том, что если число не является палиндромом, следует вновь использовать число+reverse(число), и так до тех пор, пока сумма не окажется палиндромом, либо исчерпается счетчик цикла (до 50). Привожу примеры работы.
Результат за одну итерацию:
Code
1
2
3
4
5
6
7
8
...
0 13458 + 85431 = 98889
Это палиндром
0 13459 + 95431 = 108890
0 13460 + 6431 = 19891
Это палиндром
...
Палиндромов: 4368 непалиндромов: 9186
За 50 и менее итераций:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
...
0 13544 + 44531 = 58075
1 58075 + 57085 = 115160
2 115160 + 61511 = 176671
Это палиндром
0 13545 + 54531 = 68076
1 68076 + 67086 = 135162
2 135162 + 261531 = 396693
Это палиндром
0 13546 + 64531 = 78077
1 78077 + 77087 = 155164
2 155164 + 461551 = 616715
3 616715 + 517616 = 1134331
4 1134331 + 1334311 = 2468642
Это палиндром
0 13547 + 74531 = 88078
1 88078 + 87088 = 175166
2 175166 + 661571 = 836737
3 836737 + 737638 = 1574375
4 1574375 + 5734751 = 7309126
5 7309126 + 6219037 = 13528163
6 13528163 + 36182531 = 49710694
7 49710694 + 49601794 = 99312488
8 99312488 + 88421399 = 187733887
9 187733887 + 788337781 = 976071668
10 976071668 + 866170679 = 1842242347
11 1842242347 + 7432422481 = 9274664828
12 9274664828 + 8284664729 = 17559329557
13 17559329557 + 75592395571 = 93151725128
14 93151725128 + 82152715139 = 175304440267
15 175304440267 + 762044403571 = 937348843838
16 937348843838 + 838348843739 = 1775697687577
17 1775697687577 + 7757867965771 = 9533565653348
18 9533565653348 + 8433565653359 = 17967131306707
19 17967131306707 + 70760313176971 = 88727444483678
20 88727444483678 + 87638444472788 = 176365888956466
21 176365888956466 + 664659888563671 = 841025777520137
22 841025777520137 + 731025777520148 = 1572051555040285
23 1572051555040285 + 5820405551502751 = 7392457106543036
24 7392457106543036 + 6303456017542937 = 13695913124085973
25 13695913124085973 + 37958042131959631 = 51653955256045604
26 51653955256045604 + 40654065255935615 = 92308020511981219
27 92308020511981219 + 91218911502080329 = 183526932014061548
28 183526932014061548 + 845160410239625381 = 1028687342253686929
29 1028687342253686929 + -9149880551271683415 = -8121193209017996486
30 -8121193209017996486 + 0 = -8121193209017996486
31 -8121193209017996486 + 0 = -8121193209017996486
32 -8121193209017996486 + 0 = -8121193209017996486
33 -8121193209017996486 + 0 = -8121193209017996486
34 -8121193209017996486 + 0 = -8121193209017996486
35 -8121193209017996486 + 0 = -8121193209017996486
36 -8121193209017996486 + 0 = -8121193209017996486
37 -8121193209017996486 + 0 = -8121193209017996486
38 -8121193209017996486 + 0 = -8121193209017996486
39 -8121193209017996486 + 0 = -8121193209017996486
40 -8121193209017996486 + 0 = -8121193209017996486
41 -8121193209017996486 + 0 = -8121193209017996486
42 -8121193209017996486 + 0 = -8121193209017996486
43 -8121193209017996486 + 0 = -8121193209017996486
44 -8121193209017996486 + 0 = -8121193209017996486
45 -8121193209017996486 + 0 = -8121193209017996486
46 -8121193209017996486 + 0 = -8121193209017996486
47 -8121193209017996486 + 0 = -8121193209017996486
48 -8121193209017996486 + 0 = -8121193209017996486
49 -8121193209017996486 + 0 = -8121193209017996486
0 13548 + 84531 = 98079
1 98079 + 97089 = 195168
2 195168 + 861591 = 1056759
3 1056759 + 9576501 = 10633260
4 10633260 + 6233601 = 16866861
Это палиндром
...
Палиндромов: 13181 непалиндромов: 373
0
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 3
23.10.2011, 01:00  [ТС]
Вопрос решен с помощью BigInteger.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2011, 01:00
Помогаю со студенческими работами здесь

Если меньше чем 100, но больше чем 90. IF
Как это сделать? IF Типа Больше чем 1, но меньше чем 10.

Найти элемент в массиве реальных чисел и его номер среди чисел, больше чем 7.8 и меньше чем 50.2
Найти элемент массиву реальных (дійсних) чисел (12.37, 2.43, 16.55, 0.81, 0.32, 1.345, -12.18, 0.15, 4.314, 1.29, 54.38, 0.214, 3.837,...

Найти элемент в массиве реальных чисел и его номер среди чисел, больше чем 7.8 и меньше чем 50.2
Найти элемент массиву реальных (дійсних) чисел (12.37, 2.43, 16.55, 0.81, 0.32, 1.345, -12.18, 0.15, 4.314, 1.29, 54.38, 0.214, 3.837,...

Определите, каких букв (строчных или прописных ) в нем больше: если больше прописных, чем строчных=> все буквы
Определите, каких букв (строчных или прописных ) в нем больше: если больше прописных, чем строчных=&gt; все буквы преобразуются в...

Найти багаж, число мест в котором не меньше, чем в любом другом, а общий вес не больше, чем в любом другом багаже ...
Помогите сделать задачу на паскале: Багаж пассажира характеризуется числом мест и общим весом. Создать файл, содержащий информацию о...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru