鍍金池/ 問答/C/ C語言 掉入陷阱的數(shù)字 (答案系統(tǒng)提示我本人有一處錯誤)

C語言 掉入陷阱的數(shù)字 (答案系統(tǒng)提示我本人有一處錯誤)

對任意一個自然數(shù)N0,先將其各位數(shù)字相加求和,再將其和乘以3后加上1,變成一個新自然數(shù)N?1;然后對N1重復(fù)這種操作,可以產(chǎn)生新自然數(shù)N2;……多次重復(fù)這種操作,運算結(jié)果最終會得到一個固定不變的數(shù)Nk,就像掉入一個數(shù)字“陷阱”。本題要求對輸入的自然數(shù),給出其掉入“陷阱”的過程。

輸入格式:
在一行內(nèi)給出一個自然數(shù)N0(N?0<30000)。
輸出格式:
對于輸入的N?0,逐行輸出其掉入陷阱的步驟。第i行描述N掉入陷阱的第i步,格式為: i:N?i(i≥1)。當(dāng)某一步得到的自然數(shù)結(jié)果Nk(k≥1)與上一步Nk?1相同時,停止輸出。

本人代碼如下:

#include<stdio.h>
int xian=0;
int trap(int a){
    int wei=1,x,b,sum=0;
    x=a;
    while(x>9){
        x/=10;
        wei*=10;
    }
    do{
        b=a/wei;
        sum+=b;
        a%=wei;
        wei/=10;
    }while(wei>0);
    xian=sum*3+1;
    return xian;
}

int main(){
    int a,b=0,shu=1,c;
    int trap(int a);
    scanf("%d",&a);
    c=trap(a);
    printf("%d:%d\n",shu,c);
    while(b!=c){
        b=c;
        c=trap(xian);
        shu++;
        printf("%d:%d\n",shu,xian);
    }
    return 0;
}
回答
編輯回答
法克魷

當(dāng)輸入為13時,只要輸出

1:13

就要停止了。但是你的程序輸出了

1:13
2:13
2018年7月29日 15:42
編輯回答
奧特蛋

求解答。真心想知道為什么。

2018年2月17日 06:02