原文連線
題目:輸入乙個整數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,直...