例:3n+1問題
對于任意大于1的自然數n,若n為奇數,則将n變為3n+1,否則變為n的一半。經過若幹次變換,一定會使n變為1。例如3-》10-》5-》16-》8-》4-》2-》1。
輸入n,輸出變換的次數。n不大于10的九次幂。
樣例輸入:3
樣例輸出:7
解:直接模拟過程即可,下面是代碼:
#includeint main()
{
int n, count = 0;
scanf("%d", &n);
while(n > 1)
{
if(n%2 == 1) n = n * 3 + 1;
else n /= 2;
count++;
}
printf("%d\n", count);
return 0;
}驗證上面樣例,發現正确:

那如果輸入的是999999999呢?結果:
居然是1!原來是因為定義的n為int型整數,它的最大值為2147483647,也就是說,在程式剛剛執行了一次“n = 3*n+1”時,就已經溢出了,是以直接輸出了1~是以隻好用64位長整型了,程式如下:
#includeint main()
{
int count = 0;
long long n;//定義64位長整型數
scanf("%lld", &n);//此處"%lld"也可寫成"%I64d"
while(n > 1)
{
if(n%2 == 1) n = n * 3 + 1;
else n /= 2;
count++;
}
printf("%d\n", count);
return 0;
}下面看運作結果:
程式正常運作~
總結:在編寫程式時,要注意定義的變量溢出的問題,否則很可能糾結于程式的邏輯正确與否上卻發現怎麼也找不出Bug,糾結啊...