從1到n整數中1出現的次數

2021-09-26 04:55:24 字數 1133 閱讀 5575

輸入乙個整數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出現的次數。演算法一 暴力累加...