这篇文章主要讲一下while循环结构的写法,以及有引例引起的关于乘法的算法溢出的问题的解决。第一个程序的写法比较简单,但是存在bug,当输入数据较大时不能输出正确结果,原因就是数据过大导致溢出,这个问题我会在后面详细说明。
题目:3n+1问题:对于任意大于1 的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半,经过这样的变换,一定会使n变为1,求变换的次数。
要求:输入n,n≤10^9,输出变换的次数。
初步程序:
#include
int main()
{
int n,count=0;
scanf("%d",&n);
while(n>1)
{
if(n%2==0)
n=n/2;
else
n=n*3+1;
count++;
}
printf("%d\n",count);
return 0;
}
首先说明while循环结构的组成。“while(条件&