我试图在C中考虑一个满足以下条件的函数:
例如:
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)