如何将值舍入到最接近的数字因子

时间:2015-10-15 03:00:26

标签: algorithm math factorial

这里有几个问题如何将值舍入到已知倍数。例如,有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);
    }
}

这种方法很好,但它不聪明或有效,至少我怀疑是这样的。 有没有更好的方法将数字四舍五入到除蛮力之外的基数因子?

1 个答案:

答案 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));