C語言關於數字的經典問題

2021-10-05 14:41:12 字數 2108 閱讀 3988

1.統計n是個幾位數字

演算法思想:

每次丟棄個位數字,計數器++,直到n為0;

注意:(丟棄個位:n/=10;得到個位 n%10)。

int

count

(long

long n)

return tmp;

}int

main()

測試用例,盡量詳細,

printf

("%d\n"

,count

(123456789))

;printf

("%d\n"

,count(0

));//bug

printf

("%d\n"

,count(-

123456789))

;printf

("%d\n"

,count

(123456789987654321))

;

由於發現0處出現bug,故返回修改

int

count

(long

long n)

return tmp;

}

若數字為0,則直接輸出;

若不為0,每次丟棄個位數字,計數器++,直到n為0。

2.按逆序輸出各位數字;

演算法思想:得到個位,輸出個位,再丟棄個位.重複左邊,直到n為0;

void

reverseshow

(int n)

else

if(n <0)

while

(n !=0)

printf

("\n");

}int

main()

測試用例,由於之前的bug,本次**做出了提前修改,引入了對於0的判斷;

reverseshow

(12345678);

reverseshow(-

12345678);

reverseshow(0

);

3.分別輸出每一位數字

即為順序輸出每一位數字,例如1234—>1 2 3 4

演算法思想:得到高位,輸出高位,丟棄高位,直到為0。

void

show

(int n)

else

if(n <0)

//負數處理

int tmp =

count

(n);

//得到n是幾位數字

int power =

(int

)pow

(10.0

,tmp-1)

;//1234除以1000

while

(n !=0)

printf

("\n");

}int

main()

測試用例

show

(1234567800);

//bug

show(-

12345678);

show(0

);

發現show(1234567800)出現bug,最後兩位00無法輸出。

解決方法:用for迴圈代替while迴圈

void

show

(int n)

else

if(n <0)

//負數處理

int tmp =

count

(n);

//得到n是幾位數字

int power =

(int

)pow

(10.0

,tmp-1)

;//1234除以1000

for(

int i =

0;i)printf

("\n"

);

C語言之遞迴經典問題

目錄 一 十進位制轉換 二 前中序遍歷確定後序遍歷 三 漢諾塔 四 八皇后問題 五 細胞 分治法將原問題劃分為若干個規模較小而結構與原問題相同或相似的子問題,然後分別解決這些子問題,最後合併問題的解即為原問題的解。遞迴很適合實現分治思想,遞迴的邏輯中有兩個重要概念 遞迴邊界和遞迴式。十進位制數遞迴轉...

c 語言指標操作經典問題

我們先來看看這段 吧!void pointer test memcpy buf,tant 4 buf 4 2 buf 5 0xa2 buf 6 3 buf 7 0 unsigned int buf 8 set port buf 12 100 指標偏移 buf buf 13 buf 0 0 buf 2...

C語言經典題型 喝汽水問題

喝汽水,1瓶汽水1元,2個空瓶可以換一瓶汽水,給20元,可以喝多少瓶汽水。這個問題是個經典的c語言問題,用簡單的程式可以實現,如下 include include define n 20 inttotal int num return x int main 這裡定義了乙個巨集,是為了方便我們修改資料...