将整数舍入到最接近的十或百

M. *_*yan 9 c rounding

我试图在C中考虑一个满足以下条件的函数:

  • 它接受一个大于0的整数作为参数;
  • 它将该整数舍入到最接近的值,以便只有第一个数字不是零

例如:

53出来60 ..

197年出200名..

4937出来5000 ..

有没有办法做到这一点,以满足要求,无论尾随零的数量?

例如,我理解如何在任何个案中做到这一点.divide 53 by 10 then ceil(), multiply by 10,但我想要一个可以处理任何价值的人.

意见?想法?

rma*_*ddy 19

避免字符串转换和循环:

int num = ... // your number
int len = log10(num);
float div = pow(10, len);
int rounded = ceil(num / div) * div;
Run Code Online (Sandbox Code Playgroud)


小智 9

没有必要将数字转换为字符串并返回.您可以使用基本模运算和乘法和除法来完成此操作.

这是一个纯数字解决方案,希望在运行时方面更有效:

int round_up_to_max_pow10(int n)
{
    int tmp = n;
    int i = 0;
    while ((tmp /= 10) >= 10) {
        i++;
    }

    if (n % (int)(pow(10, i + 1) + 0.5)) {
        tmp++;
    }

    for (; i >= 0; i--) {
        tmp *= 10;
    }

    return tmp;
}

printf("Original: %d; rounded: %d\n", 4937, round_up_to_max_pow10(4937));
Run Code Online (Sandbox Code Playgroud)