c - C 中的除以 2 和无限循环

标签 c loops division

我正在实现 3n+1 算法,但由于某种原因,当 n=2 时,除法 n = n/2 不会改变值,从而创建无限循环,我看不到为什么:

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
    int i=0,j=0,n=0,count,max;

        scanf("%d",&i);
        scanf("%d",&j);

        max = 0;

        for(n=i; n<=j; n++){
            count = 0;

            while(n != 1){
                //Debug print
                printf("%d - %d\n",count,n);

                if(n%2 != 0){ //Odd
                    n = 3 * n + 1;
                } else { //Even

                    n = n / 2;

                    //n /= 2;
                    //n = n >> 1;
                }
                count++;
            }
            max = (count > max) ? count : max;
        }
        printf("%d %d %d\n",i,j,max);

    exit(EXIT_SUCCESS);
}

[解决]for循环和de while循环改变了n的值

for(k=i; k<j;k++){
    count =0;
    n = k;
    while( n!= 1){
          . . .

最佳答案

正在改变n,并且正在退出while循环。但是,此后执行的代码会导致无限循环。

如果您无法使用调试器,请尝试在 count = 0 之后添加一条 printf 语句,看看发生了什么。或者,假设 while 循环确实以 n=1 退出(确实如此),当您开始另一次迭代时 n 会发生什么for 循环?

关于c - C 中的除以 2 和无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271608/

相关文章:

c++ - 运算符优先级在 C++ 中不符合预期

haskell - Haskell 中的除法,还是没明白

Javascript Integer Division,或者 Math.floor(x) 等同于 x | 0 表示 x >= 0?

java - 我不知道如何使用数组进行划分

c - strcat 错误

c++ - C/C++ 后置递增不止 1

你能帮我理解以下代码:

loops - 如何在柏树中停止循环

c - 无法弄清楚指针转换的语法

python - 使用 list.pop() 反转列表的问题