gpt4 book ai didi

c - 一个数在没有休息的情况下整除多少次?

转载 作者:行者123 更新时间:2023-12-04 10:34:42 25 4
gpt4 key购买 nike

我目前正在尝试编写一种方法来检查一个数字被 5 整除且余数为 0 的频率(例如,25 是两倍;125 是三倍)。

我认为我的代码是正确的,但它总是说它可能比实际多一次(例如 25 是三次;错误)。

我的方法如下:

 int main()
{
div_t o;
int inp = 25, i = 0;
while(o.rem == 0){
o = div(inp, 5);
inp = o.quot;
i++
}
return 0;
}

我已经调试了代码并发现问题是它再次进入循环,即使其余部分大于 0。这是为什么?我真的无法理解它。

First: 25/5 = 5; Rest = 0;
Second: 5/5 = 1; Rest = 1; - Shouldn't it stop here?
Third: 1/5 = 0; Rest = 1;

啊……明白了。当用数字完成除法时,达到余数为 0 的点,这会导致在 i 增加之后出现更大的零。

解决该问题的最简洁方法是什么? i -= 1 似乎有点像解决方法,我想避免使用 if 来中断

最佳答案

您正在使用 div() 进行除法,我必须查找它以验证它是标准的一部分。我认为它很少使用,更适合您真正关心性能的情况。这似乎不是这种情况,所以我认为它有点模糊。

无论如何,如果没有 div(),我希望它看起来是这样的:

#include <stdio.h>

unsigned int count_factors(unsigned int n, unsigned int factor)
{
unsigned int count = 0;
for(; n >= factor; ++count)
{
const int remainder = n % factor;
if(remainder != 0)
break;
n /= factor;
}
return count;
}

int main(void) {
printf("%u\n", count_factors(17, 5));
printf("%u\n", count_factors(25, 5));
printf("%u\n", count_factors(125, 5));
return 0;
}

这打印:

0
2
3

关于c - 一个数在没有休息的情况下整除多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39744851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com