輸入乙個整數,求1~n這n個數的十進位制表示1的個數。
將n的十進位制的每一位單獨拿出討論,每一位的值記為weight。
1、個位
假若n=534。534的個位從0~9變化了53次,這53我們記為round。因為weight為4>0。因此第54輪為0~4,因此1出現了count=round+1。若weight為0,則出現count=round。
2、十位
與個位類似,但不同點在於從1~n,每增加10,十位的weight才加1。一輪週期0~9週期內所以1會出現10次。即count=round*10。當weight > 1時,在此場景下為3,因此第六輪出現了10次1。count = round*10 + 10。若weight為0,則count為round*10。
3、百位類似十位。
對其他位來說,記每一位的權值為base,位值為weight,該位之前的數是former。
則:比如:
534 = (個位1出現次數)+(十位1出現次數)+(百位1出現次數)=(53*1+1)+(5*10+10)+(0*100+100)= 214
function count(n)
return count;
}console.log(count(534)); //214
求n個數 1 n 的質因子
求n個數 1 n 的質因子,我用到了素數篩選法的思想,例如找到素數2,2是2,4,6,8,10 的質因子,3是3,6,9,12 的質因子,然後找到素數5,若是求乙個數n的質因子,請參考 include includeint a 10001 20 b 10001 b i 表示第i個數的質因子個數,a ...
計算1 n之間1的個數
求出113的整數中1出現的次數,並算出1001300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數 從1 到 n 中1出現...
求1 n的階乘之和
求階乘之和,以前最開始想到的就是寫兩個迴圈,複雜的o n 2 後來再寫一道題的時候,看到只走一遍的,複雜的為o n 的 題目 傳送門 這個是先用線性篩篩出素數,剛開再怎麼算階乘和的時候,就犯難了。這麼大的數,怎麼搞 之前的 long long sum 0 long long sum 0 for in...