輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。
例如輸入12,從1到12這些整數中包含「1」的數字有1,10,11和12,其中「1」一共出現了5次。
思路:
假如說有abcdef位,當我們有任以數在c處為1,_ 1 _ _
大致分為00到ab和00~ab-1這兩種
00到ab 的話 中間的1是根據邊界條件而定是否存在
00到ab-1 由於進製數學等常理,1肯定存在
在1的前面有兩位,就有00~ab-1 這麼多情況也就是十進位制數ab這麼多種
在1的右邊有三位,就有000~999這麼1000種情況。
此時 的一的個數就為 ab* 1000
然後判斷邊界00~ab的情況,
如果c=1此時右邊還有def種情況,一的個數還要加上 000~def 也就是def+1種
如果c=0沒有用了,沒有一不管
如果c>1 則說明還能有000~999種(數學性質,只要大於1有新的進製就有1000個數)一的個數再加上1000;
這裡的c可以換成abcdef任意乙個別的數,所以用for迴圈從最左往右遍歷,每個位都像上面c位那樣操作,最後得到的就是結果
總結:就是當每一位上是1時考慮其他位
巨集觀上分為00…~abc…-1和00…到abc…-1兩種情況
第二種要計算邊界情況。。。。
public
intnumberof1between1andn_solution
(int n)
int res =0;
for(
int i=m.length-
1;i>=
0;i--
)for
(int j = i-
1;j>=
0;j--
)//開始統計個數
res = res+left*t;
if(m[i]==1
)else
if(m[i]
>1)
}return res;
}
original ideal from acwing 整數中1出現的次數(從1到n整數中1出現的次數)
求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。include u...
整數中1出現的次數(從1到n整數中1出現的次數)
時間限制 1秒 空間限制 32768k 題目描述 include using namespace std class solution 求之前的length 1位中含乙個數 int base1 0 int base2 1 for int i 0 i1 i cout cout cout 求從base2...
整數中1出現的次數(從1到n整數中1出現的次數)
求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。演算法一 暴力累加...