![]() |
Несколько цифер в одной цифре
Привет всем. Вопрос такой:
Функция должна возвратить одно число. В теле функции происходит выбор этого числа из нескольких вариантов, например 1, 2 или 3. Пример: Код:
if( x=a ) code = 1; Пример: Код:
if( x=a ) code_a = 1; Сразу напрашиваетс решение с включением определенног бита в переменной code, но хочется узнать математическое решение этого вопроса. Именно как разложить число и выяснить не содержит ли оно в себе значения заранее определенных вариантов. Значения могут быть любыми, не обязательно 1, 2 и 3, а например 2, 4 и 8 лишь бы решалось. PS: Математику забыл совсем :) Проще говоря: Как раздожить число на числа из заданного диапазона значений? |
Не особо понятно, что же именно надо.
К примеру, есть числа a=1, b=2, c=3 Складываем a+b, получаем 3. И в чем суть вопроса с математической точки зрения? Складывались ли a и b, или просто 0+3? или -5+8 ? |
Delirium, Короче получаю переменную x, что в ней я не знаю, но имею диапазон чисел , которые или комбинацию которых может содержать переменная x.
Какие математические операции мне надо проделать? Упрощает задачу то, что числа в переменной x не могут повторяться... |
если используется только операция сложения, то это задача линейной алгебры. Линейная операция, которая преобразует несколько переменных в одну является вырожденной:
Код:
x ? ? |
В общем, это довольно банальная задачка, если по битам разносить.
Получается, что функция возвращает числа из пяти переменных: 1, 2, 4, 8, 16. Скажем, нужно вернуть первое, третье и четвёртое число. Сумма получается 1+4+8=13. Никаким другим способом 13 получить из этих чисел нельзя. |
Цитата:
Цитата:
Все дело в диапазоне значений Диапазон 2, 4, 8, 16 Имею переменную x = (16 + 8 + 4 + 2) = 30 Шагаю от наибольшего числа из диапазона = 16 30 - 16 = 14 Здвигаюсь на одно значение диапазона = 8 14 - 8 = 6 Здвигаюсь на одно значение диапазона = 4 6 - 4 = 2 Здвигаюсь на одно значение диапазона = 2 2 - 2 = 0 Таким обоазом выясняю что переменная x содержит 16, 8, 4 и 2 Имею переменную x = (8 + 4 + 2) = 14 Шагаю от наибольшего числа из диапазона = 16 т.к 14 < 16 Здвигаюсь на одно значение диапазона = 8 14 - 8 = 6 Здвигаюсь на одно значение диапазона = 4 6 - 4 = 2 Здвигаюсь на одно значение диапазона = 2 2 - 2 = 0 Таким обоазом выясняю что переменная x содержит 8, 4 и 2 Извиняюсь за неграмотность. Так можно безошибочно определять какие числа содержит переменная x (если зачения разнесены по битам 2, 4, 8, 16 ... Хотя изначально речь шла о диапазоне чисел 1, 2, 3, 4 ...) Цитата:
|
Цитата:
Тогда, к примеру, возвращенный результат 321 означает, что функция вернула и 1 и 2 и 3. |
Думаю можно развить мысль и зделать так переменная содержит два значения a = { 1, 2 } ; b= { 2, 4 }; c= { 3, 8 }; d= { 4, 16 };
Таким образом первое значение простое число, второе разнесенное по битам значение этого числа Тогда складывая a + b , беру вторые значения и складывваю их. Получится так или нет ? Цитата:
|
Время: 04:46. |
Время: 04:46.
© OSzone.net 2001-