第八屆藍橋杯第五題 取位數(C語言)

2021-10-02 11:48:15 字數 1339 閱讀 6617

求1個整數的第k位數字有很多種方法。以下的方法就是一種。對於題目中的測試資料,應該列印5。請仔細分析原始碼,並補充劃線部分所缺少的**。

#include

intlen

(int x)

intf

(int x,

int k)

intmain()

填空答案為:return f(x/10,k)

int

main()

賦值x=23574,輸出並且呼叫函式f,傳遞引數x和3;

同時知道了是求x的第3位。

intf(

int x,

int k)

x傳遞引數過來給x,3傳遞給k,即x=23574,k=3;

if(條件),條件裡面判斷len(x)與k的長度對比,相等則return x%10(即返回x的個位數);否則___?___。(這個函式樣子很像遞迴的)這時就去分析下乙個函式。

int

len(

int x)

x由上個函式傳遞為23574;

不難看出這個函式是在判斷x有幾位數字:

if(x<10)return 1;是當x屬於1~9(即個位數),返回位數為1;

return len(x/10)+1;遞迴呼叫,x/10即自己減去一位後繼續呼叫該函式進行判斷,同時在後面+1來保證整數的位數不會發生改變;

len函式是判斷x的位數,而f函式中的兩個return,乙個是在x的位數和k相等時返回x的個位數,另乙個return是x的位數與k不相等時發生,這個時候就想到了遞迴;因為有個return是位數相等時返回,我們就把這個填空問題變成如何在位數不相等的情況下變成位數相等的。

多一位我們就除10,來減掉一位在進行呼叫判斷(不存在少這種情況);所以最後就想到了

return

f(x/

10,k)

;//填空

#include

intlen

(int x)

intf

(int x,

int k)

intmain()

這道題就是要想明白遞迴,一看到下面這種型別的函式:

int

factorial

(int n)

就要想到是遞迴函式,這道題只是把else去掉了,其實並不影響遞迴的本質。

c語言第八屆藍橋杯(第五題)

求1個整數的第k位數字有很多種方法。以下的方法就是一種。include 資料應該為5 求x用10進製表示時的數字長度 int len int x 取x的第k位數字 int f int x,int k int main 我自己的思路 看到題之後 大概瀏覽了一下 還是很簡單的 肯定缺失的部分是遞迴出口 ...

藍橋杯 取數字(第八屆第五題)

求x用10進製表示時的數字長度 intlen int x 取x的第k位數字 intf int x,int k intmain 對於題目中的測試資料,應該列印5。請仔細分析原始碼,並補充劃線部分所缺少的 注意 只提交缺失的 不要填寫任何已有內容或說明性的文字。結果 f x 10,k 分析 x長度和要取...

第八屆藍橋杯C B組第五題 取第k位數

求1個整數的第k位數字有很多種方法。以下的方法就是一種。求x用10進製表示時的數字長度 int len int x 取x的第k位數字 int f int x,int k int main 對於題目中的測試資料,應該列印5。請仔細分析原始碼,並補充劃線部分所缺少的 注意 只提交缺失的 不要填寫任何已有...