这里有几个问题如何将值舍入到已知倍数。例如,有question,但它显示了如何将值舍入到指定的倍数(例如,第9轮到5的倍数将产生10)。我想将值舍入到最接近给定数字的因子。例如,让我说我想将一个值四舍五入到最接近的因子48.
Factors of 48: 1, 2, 3, 4, 6, 8, 12, 16, 24, 48
如果我的值是9,我想要舍入到12.我知道这样做的唯一方法就是蛮力:
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)
private int UCLN(a, b) {
return (b==0)? a:UCLN(b, a%b) } // first input a>b
功能主要:
int u = UCLN(clock, value);
return clock / ((clock/u) / (value/u));