除以2和C中的无限循环

时间:2016-10-26 20:31:30

标签: 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);
}

[Solve] for循环和de while循环正在改变n

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

1 个答案:

答案 0 :(得分:2)

正在更改n,并且正在退出while循环。但是,之后执行的代码负责无限循环。

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