[identity profile] first-lost-soul.livejournal.com posting in [community profile] useful_faq
Как из двух целых чисел в диапазонах (0-9999) и (0-999999) составить другое число, причём так, чтобы можно было каким-то алгоритмом эти числа обратно извлечь, и не ошибиться?

Конечно, приходит в голову что-то в этом роде: 12000561 (для 12 и 561), но должен быть более красивый алгоритм...

Date: 2012-06-11 09:56 am (UTC)
From: [identity profile] granite-golem.livejournal.com
Какой более красивый алгоритм вы ищете? Всё именно так тупо, как вы написали.

Date: 2012-06-11 01:45 pm (UTC)
From: [identity profile] kray-zemli.livejournal.com
Записывайте число задом наперёд. Примените какой-нибудь способ шифрования.

И это, вторым числом лучше сделать то что до 9999, потому что так будет меньше нулей и короче запись.

Date: 2012-06-11 10:26 am (UTC)
From: [identity profile] delfin-1975.livejournal.com
А чем вас этот алгоритм не устраивает?

Date: 2012-06-11 10:52 am (UTC)
ext_1775189: Bezenchuk (Default)
From: [identity profile] spelller.livejournal.com
Про хэширование почитайте. Все уже украдено придумано до нас...

Date: 2012-06-11 12:04 pm (UTC)
From: [identity profile] nofuture-33.livejournal.com
в вашем примере за основу взято 00000000
для разнообразия можно брать 123456789 или 222222222 или еще какое-то сочетание.
Или договориться его менять периодически.
Отправили 1-го - значит 111111111, 9-го - 999999999 и т.п.
Много простіх вариантов.
Вы видимо мало в детстве в шпионов играли с одноклассниками ))))

Date: 2012-06-11 12:12 pm (UTC)
From: [identity profile] blood-again.livejournal.com
Чтобы числа явно не просматривались? Навскидку, записать последовательно биты первого числа в биты результата 0,2,4... а биты второго числа - в биты результата 1,3,5...

Вам достаточно машинного алгоритма? Или желателен такой, чтобы человек быстро мог выполнить действия в уме?

Date: 2012-06-11 01:56 pm (UTC)
From: [identity profile] blood-again.livejournal.com
Если допускается использование дополнительных величин в алгоритме (пи и прочие), то можно использовать Ваш алгоритм с небольшим дополнением:

Res = (A*1000000+B) xor C
Ну или Res = ((A << 20) + B) xor C

Это выполняется проще и быстрее, чем разреживание битов. Маскирующее число C можно сделать переменным в духе предложенного ув. [livejournal.com profile] nofuture_33.

Date: 2012-06-11 02:46 pm (UTC)
From: [identity profile] led-mist.livejournal.com
сделать два числа корнями квадратного уравнения по теореме Виета, а новое число составить из его коэффициентов разделенных нулями :)