問題:1,寫乙個函式f(n),返回1到n之間出現的」1"的個數。2,滿足條件「f(n)=n"的最大的n是多少?
解法:對於之間的每乙個數字n,分情況討論每乙個數字出現1的個數,例如要計算百位上出現1的次數,它將會受到三個因素的影響:百位上的數字,百位以下(低位)的數字,百位(更高位)以上的數字。如果百位上的數字為0,可知,百位上可能出現1的次數由更高位決定,並且等於更高位數字*當前位數。如果百位上的數字為1,可知,百位上的數字可能出現1的次數不僅受更高位影響,還受低位影響。如果百位上數字大於1,則百位上可能出現1的次數僅由更高位決定,並且等於更高位數字加1,再乘以當前位數。
1view codelonglong sumls(ulonglong n)
226 ifactor *= 10;27
}28return
icount;
29 }
問題二用類似數學歸納法的思路 當n增加10k 時,f(n)至少增加k*10k-1
程式設計之美 1的數目
我一上來就是遍歷著計算,但在面試或者應用中決計是不可行的。我們換一種思路,乙個數abcdefg,我們計算出各位,十位,百位。有多少個1,加一起即可。就23012來說,看百位上它為0,從1 23012中,百 位上有多少個1取決於比它高的所有位決定。100 199,1100 1199,2100 2199...
程式設計之美 1的數目
給定乙個十進位制正整數n,寫下從1開始,到n的所有整數,然後數一下其中出現的所有 1 的個數。解法一 窮舉法,遍歷1到n的每乙個數,計算其出現1的整數的個數 雖然笨,但是想不出其他方法就這樣了 解法二 分類討論,分別討論個位,十位和百位.上1能出現的次數。假設這個數為abcd,則 d 為1時,出現1...
程式設計之美 1的數目
問題1描述 求1 n十進位制中1的數目f,f 12 5 include typedef long long ll ll sum1s ll n ifactor 10 return icount int main 2 求滿足f n n的最大數 找規律 9以下 1個 99以下 20個 999以下 300個...