求從1到n這n個整數的十進位制表示中1出現的次數

2021-06-21 13:39:45 字數 779 閱讀 9345

原文連線

題目:輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。

例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。

分析:這是一道廣為流傳的google面試題。

簡單的方法就是按照給位進行分析

在個位出現1的個數=n/10+(個位=0,0;個位》1,1;個位=1,低0位+1);

十位位出現1的個數=n/100*10+(十位=0,0;十位》1,10,;十位=1,低一位+1);

百位出現1的個數=n/1000*100+(百位=0,0;百位》1,100;百位=1,低兩位+1);

等等演算法的複雜度僅僅和位數有關

演算法描述:

(1)求出所給正整數a的位數,假設為n,num儲存1的個數

(2)另p=a,num+=p/10i*10i-1;(i=1...n-1);

(3)令p=a/10i-1;p=p%10,if(p==1) num+=a%10i-1+1;if(p>1) num+=10i-1;(i=1....n)

(4)printf(num);

手工求解:

個位=12+1

十位=10+10

百位=0+26

59個1

演算法:

#include int test(int a)

int function(int a)

p=a;

for(i=1;i<=n;i++)

return num;

}void main()

從1到n這n個整數的十進位制表示中1出現的次數

今天遇到乙個題目,求1到n個整數中1出現的次數,這是以前寫過的題目 include include int main printf 含有1的個數為 d n sum return 0 現又從新寫了乙個,並附上思路 include int main printf 含有1的個數為 d n sum retu...

十進位製到n進製的轉換

隱藏行號 複製 demo n is the base,translate m to n baseint d2n base int m,int n,int buffer buffer index r return index int main int argc,char argv endif here...

N進製與十進位制之間的 轉換(整數,小數)

自 1 整數部分 十進位制整數轉換為n進製整數採用 除n取餘,逆序排列 法。具體做法是 將n作為除數,用十進位制整數除以n,可以得到乙個商和餘數 保留餘數,用商繼續除以n,又得到乙個新的商和餘數 仍然保留餘數,用商繼續除以n,還會得到乙個新的商和餘數 如此反覆進行,每次都保留餘數,用商接著除以n,直...