/*總體思路:先求個位上出現的1的個數,再找十位再找百位。。
先看個位找找規律:
5(05) 1 1
15 2 1,11
25 3 1,11,21
35 4 1,11,21,31
...325 33 1,11,21,31,41,...,301,311,321
結論:個位上的1的數目s= n / 10 + 1;
再看十位,找找規律:
25 10 10,11,12,13,14,15,16,17,18,19
35 10 10,11,12,13,14,15,16,17,18,19
95 10 10,11,12,13,14,15,16,17,18,19
125 20 10,11,12,13,14,15,16,17,18,19,110,111,112,...,118,119
725 80 10-19,110-119,210-219,310-319,410-419,510-519,610-619,710-719
3225 330 10-19,20-29,...510-519,610-619,...1010-1019,1110-1119,1210-1219,...,3110-3119,3210-3219
結論:十位上的1的數目s = (n / 100 + 1) * 10;
....
將個位上的1的數目看作
(n / 10 + 1) * 1;
(n / 100 + 1 ) * 10; 十位上的
猜想百位上1的數目應該是:
(n / 1000 + 1 ) * 100
特殊情況,當最高位為1時,最高位上1的數目為其餘各位所組成的數加1,如125百位上的1的個數就是25+1=26個
*/
int numberof1in1_n(int n)//從1到n的整數中1出現的次數
return count;
}
程式設計之美 2 4 「1的數目」
擴充套件問題 二進位制數n,從1開始,到n的所有二進位制數,然後數下其中出現的所有 1 的個數。例如 f 1 1 f 10 2 因為01,10共有2個1 f 11 100 因為01,10,11共有4個1 思路 以10110為例,考慮最高位為0時共有幾個1,因為後面4位中1和0出現的概率是相等的,也即...
程式設計之美 2 4 1的數目
package code.beauty.fungame public class countone private static int count1inaint int n return num private static void count1inallint int n system.out...
程式設計之美 2 4 1的數目
這道題其實是做過了的,在中 但是再次做還是相當的糟糕。又看了一遍答案。關鍵 要求每一位上1的個數,其任意一位上1的個數受當前位 高位 低位三方面的影響。注意這三位怎麼求,注意資料型別。注意迴圈條件。include long long sum1s unsigned long long n ifacto...