WaterMan
J.R.R.
offline
Опыт:
17,019Активность: |
[Pascal] Нахождение цифры по позиции
В общем, сформулирую вопрос так:
Дано n-значное число (причем вводится оно автоматически по заданной закономерности и содержит более 30000 разрядов). Ввод можно осуществить через цикл (тут других вариантов нет). Допустим, закономерность будет такой: 369121518...n (к каждой цифре прибавляется 3). В общем, требуется определить, какая цифра стоит на позиции x (вводится вручную). У кого-нибудь есть предположения? Мое предположение (по данному примеру):
Это позволит определить число s на позиции i. Но как определить цифру, хз. Заранее спасибо |
18.09.2010, 20:02 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
tysch_tysch
Работаем
offline
Опыт: отключен
|
число хранится в строке? в чём проблема? |
18.09.2010, 20:22 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Омега
offline
Опыт:
12,033Активность: |
Тракторный метод:
|
18.09.2010, 20:24 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
WaterMan
J.R.R.
offline
Опыт:
17,019Активность: |
Омега, в том-то и фишка. В какой-либо тип заносить не надо, просто через цикл проверяем каждое число. Закономерность я представил для примера.
Z, если бы число хранилось в строке, все было бы гораздо проще, но тут разряд числа может доходить до 30000. WaterMan добавил: Омега, ты находишь число, а не цифру. |
18.09.2010, 20:25 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
это неверная изначально задача) ну допустим там будет идти
9998 10003 10007 в твоей недостроке это выглядит так 99981000310007 вопрос знатокам - где разделитель ? |
18.09.2010, 20:25 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Омега
offline
Опыт:
12,033Активность: |
Задача криво написана. |
18.09.2010, 20:27 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
tysch_tysch
Работаем
offline
Опыт: отключен
|
WaterMan, так храни в строке в чём проблема ? о_О |
18.09.2010, 20:28 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
WaterMan
J.R.R.
offline
Опыт:
17,019Активность: |
ScorpioT1000, нет, в задаче закономерность другая. Тут роли не играет. Разделителя нет, гарантирую.
WaterMan добавил: Z, где ты видел строку из 30000 символов? По крайней мере, в паскале. |
18.09.2010, 20:29 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Омега
offline
Опыт:
12,033Активность: |
Разряд до 30000, это в смысле может быть число 60000..."еще 29990 нулей"...00000? |
18.09.2010, 20:29 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
WaterMan
J.R.R.
offline
Опыт:
17,019Активность: |
Омега, могу предложить пример с цифрой строки Фиббоначчи, разницы нет, ее решить еще сложнее. |
18.09.2010, 20:30 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
тогда тебе надо узнать, сколько цифр будет у каждого из чисел массива |
18.09.2010, 20:30 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
WaterMan
J.R.R.
offline
Опыт:
17,019Активность: |
Омега:
да, примерно так. Ни один тип не поддерживает такого числа. |
18.09.2010, 20:31 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
т.е.
... 9998 10003 10007 ... мы храним как ...99981000310007... и ...,4,5,5,... чтобы можно было правильно перепрыгивать к новому числу |
18.09.2010, 20:31 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Омега
offline
Опыт:
12,033Активность: |
Я так понял, такое титаническое число только в виде текста хранить можно. Дальше просматривать блоками, скажем, по сотне символов. |
18.09.2010, 20:32 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
WaterMan
J.R.R.
offline
Опыт:
17,019Активность: |
ScorpioT1000, я это узнал уже, массив не использовал, переменные просто динамически менял. Но, если он находит число, допустим 123, находящееся на нужной нам позиции (то есть позиция цифры 1 2 или 3), то он в любом случае будет писать 1 (даже если нам требуется 2 или 3, так как цикл прервался, а по окончании осталось число 123).
WaterMan добавил:
ScorpioT1000: да, но тогда понадобится массив из 30000, а паскаль с таким массивом работать отказывается. WaterMan добавил: Омега: Тогда опять же нужен массив из строк (также надо учитывать что макс. длина строки = 255). |
18.09.2010, 20:36 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
надо не массив, а формулу, чтобы на входе мы принимали индекс числа, скажем, пятое, а на выходе получали число цифр у него. и начинаем считать т.е. сначала первое, у его одна цифра, сдвигаем на 1, дальше второе, у него одна, сдвигаем на 1,... потом десятое, у него 2 цифры, сдвигаем на 2 и так идём до i элемента, который надо было запросить, достаем все цифры и переводим в int |
18.09.2010, 20:38 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
WaterMan
J.R.R.
offline
Опыт:
17,019Активность: |
так примерно я и писал, но тут возникает проблема Даже если вытащить все цифры нужного нам числа (то есть нужная цифра находится в числе 123), то тут получается цикл закончен, а на выходе мы получили 3 цифры, причем не знаем, какая из них нам требуется. |
18.09.2010, 20:43 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
GadenbIsh
Просто Гад
offline
Опыт:
70,430Активность: |
сделай простой линейный список (ну, т.е. структура: цифра и ссылка на следующую такую же структуру) тогда уж, ты сможешь записать туда любое число, сколько у тебя только оператива позволяет |
18.09.2010, 21:07 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
WaterMan, ты чтото тупишь, не знаю че там у тебя с циклами, но там явно должно быть что-то больше чем просто строка, заполненная цифорками, как минимум алгоритм построения этих циферок.
грубо говоря на таком "псевдокоде" получится вот что:
|
18.09.2010, 21:29 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|