2015-10-15 2 views
1

Здесь есть несколько вопросов о том, как округлить значение до известного кратного. Например, есть , но это показывает, как округлить значение до заданного множителя (например, от раунда 9 до кратного 5 даст 10). Я хочу округлить значение до ближайшего коэффициента заданного числа. Для примера позволяет говорит, что я хочу, чтобы округлить значение до ближайшего фактора 48.Как округлить значение UP до ближайшего коэффициента числа

Factors of 48: 1, 2, 3, 4, 6, 8, 12, 16, 24, 48 

Если мое значение 9 Я хотел бы округлить до 12. Единственный способ, которым я знаю, чтобы сделать это с грубой force:

class Program { 
    static void Main(string[] args) { 
     const int clock = 48; 
     int value = 9; 

     while(value < clock && (clock % value) != 0) { 
      value++; 
     } 

     Console.WriteLine(value); 
    } 
} 

Это работает нормально, но это не умно или эффективно, по крайней мере, я подозреваю, что так оно и есть. Есть ли лучший способ округлить число до коэффициента базового номера, кроме грубой силы?

+0

Уточнено постановку задачи и решать, почему поставляется ссылка дубликатом вопрос не применим. –

+0

Lame, что это было закрыто как обман, но дублированный вопрос и решение, на которые ссылается, НЕ обращаются к моей проблеме. Дэвид, ты прочитал мой фактический вопрос или основал свое решение только на титул? –

+0

Пришел сюда, ища то же самое. Разочаровать, чтобы найти это неправильно закрытым. – mcallinder

ответ

0
private int UCLN(a, b) { 
return (b==0)? a:UCLN(b, a%b) } // first input a>b 

функция Main:

int u = UCLN(clock, value); 

return clock/((clock/u)/(value/u)); 
Смежные вопросы