Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2014, 20:32   #1
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
Восклицание Программы работы с числами

Прошу помочь, ибо вообще не представляю как решать.
Даны три числа, записанных в какой то системе счисления, причем сумма двух первых равна третьему числу в этой системе счисления. Определить основание системы счисления.
Для всех задач входные данные записываются в файл input.txt, а выходные в output.txt. По окончании работы над задачей создается ехе-файл.
ksesh вне форума Ответить с цитированием
Старый 23.09.2014, 20:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Умеешь переводить из систем счисления?
Если да то:
1) Найди в числе самую большую цифру (или букву) по порядку и считай что эта цифра или буква говорит о начальной системе счисления
2) переводи начиная с этой системы в десятичную, пока не получишь в десятичной числа, отвечающие условию

Т.е. Допустим у нас есть функция СС(Число, Система):Число, которая переводит
И есть числа: 125 689 11. Самая большая цифра - 9. Соответственно никак эти числа не могут быть в 6-ти или 2-и чных системах.
получается цикл:
Код:
for i:=9 to 32 do
 if сс(число1,i)+сс(число2,i)=сс(число3,i) then i - нужна система счисления.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2014, 10:29   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

только перебором?
а аналитически никак не получится, например, младший разряд первого числа + младший разряд второго числа должны дать младшую цифру третьего числа.
если они дают "в чистую" (без переноса), отлично, переход к следующему разряду и так далее. пока не дойдёт до конца числа или пока не возникнет ситуация, когда цифра в третьем числе меньше, чем сумма аналогичных разрядов.
Если это есть, то основание системы счисления вычисляется. (например, если 5 + 4 = 2, то основание системы счисления = 7 (5+4-2 = 7 )

Если же прошли по всем разрядам и не одного переноса не было, тогда ещё проще.
Как правильно сказал Stilet - берём максимальную цифру - основание системы счисления = Макс.Цифра + 1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2014, 11:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а аналитически никак не получится
Я бы ниасилил аналитикой )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2014, 11:28   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
Я бы ниасилил аналитикой )
да ладно тебе на себя наговаривать то..

я алгоритм расписал, на мой взгляд, он очень быстро и просто реализуется.

Твой алгоритм (с перебором) тоже очень несложно реализовать.

Так что, у автора темы теперь целых ДВА варианта решения задачи.
Можно реализовать оба и проверить (сравнить результаты) + выбрать лучший.

Последний раз редактировалось Serge_Bliznykov; 24.09.2014 в 11:32.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2014, 12:44   #6
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
По умолчанию

а можно более понятным чайнику языком это всё объяснить
ksesh вне форума Ответить с цитированием
Старый 25.09.2014, 14:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ksesh, во-первых, Вам дали ДВА алгоритма решения.
Один (от Виталия aka Stilet) гарантированно выдаст правильный ответ.
Но решение задачи будет через выполняться через полный ПЕРЕБОР всех возможных вариантов основания системы счисления, начиная с минимально допустимого.

второй, который предложил я, намного эффективней, НО! Я не поручусь, что он вообще рабочий или что он для любых входных данных работает.

Какой из двух алгоритмов Вы не поняли, что именно Вам объяснить?


p.s. только умоляю, не говорите, что Вы вообще всё не понимаете, программирование не знаете, Вам это всё не нужно и что Вам просто нужна готовая программа... Не расстраивайте меня!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2014, 15:59   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Внесу копеечку. В RxLib с лохматых годов есть функция, готовая к употреблению без обработки напильником.
Код:
// Преобразование числа по основанию В в строке S в десятичное.
function Numb2Dec(S: string; B: Byte): Longint;
var
  I, P: Longint;
begin
  I := Length(S);
  Result := 0;
  S := UpperCase(S);
  P := 1;
  while (I >= 1) do begin
    if S[I] > '@' then Result := Result + (Ord(S[I]) - 55) * P
    else Result := Result + (Ord(S[I]) - 48) * P;
    Dec(I);
    P := P * B;
  end;
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.09.2014, 17:44   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
только перебором?
Серёга, какой, нахрен, перебор. Недесятичные системы исчисления.

Загадочная автобиография.

«Я окончил курс университета 44 лет от роду. Спустя год, 100-летним молодым человеком, я женился на 34-летней девушке. Незначительная разница в возрасте — всего 11 лет — способствовала тому, что мы жили общими интересами и мечтами. Спустя немного лет у меня была уже и маленькая семья из 10 детей. Жалования я получал в месяц всего 200 рублей, из которых 1/10 приходилось отдавать сестре, так что мы с детьми жили на 130 руб. в месяц» и т. д.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 25.09.2014 в 17:51.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать класс FazzyNumber для работы с нечеткими числами, С++. Mashen'ka3 Общие вопросы C/C++ 0 23.05.2013 23:29
тип данных для работы с большими числами Voldemort93 Общие вопросы Delphi 3 17.02.2013 17:46
Создание класса для работы с дробными числами.Язык Си++. Salatiq Помощь студентам 0 17.05.2012 16:52
Калькулятор для работы с большими числами. Ассемблер. Колямбий Фриланс 1 03.05.2012 02:34
Модуль для работы с дуальными числами Wizlight Общие вопросы Delphi 1 13.04.2008 14:11