整數中1出現的次數

2021-09-24 13:10:28 字數 1018 閱讀 4630

題目:

求出1-13的整數中1出現的次數,並算出100-1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。

思路:

乙個數n具有個位、十位、百位…對於任意位,該位置上1出現的次數與該位高位上的數字、低位上的數字以及它本身有關,而具體的對應關係取決於它自己的大小,對於數字12345,百位c=3的高位數字a=12,低位數字b=45

對百位上的數進行分析:

對於數2012,百位上有1的數分別是100-199、 1100-1199,每一段都有100個,因此有2100個1,也就是a100個

對於數2112,百位上有1的數分別是100-199、 1100-1199、 2100-2112,共有a*100+b+1個

對於數2212,百位上有1的數分別是100-199、 1100-1199、 2100-2199,共有(a+1)*100個

對於其他位都是這個規律

**

class solution:

def numberof1between1andn_solution(self, n):

# write code here

if n<1:

return 0

result = 0

i = 1

while n//i != 0:

a = n//(10*i)#高位

b = n%i#低位

c = (n//i)%10#當前位

if c == 0:

result += a*i

elif c == 1:

result += a*i+b+1

else:

result += (a+1)*i

i *= 10

return result

整數中1出現的次數

針對牛客網試題作個記錄 問題 整數中1出現的次數 從1到n整數中1出現的次數 求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問...

整數中1出現的次數

乙個更好的辦法是利用數學公式直接計算出最終的結果,該方法是依次求出數字 x 在個位 十位 百位等等出現的次數,再相加得到最終結果。這裡的 x 1,9 x 1,9 因為 x 0 x 0不符合下列規律,需要單獨計算。首先要知道以下的規律 依此類推,從 1 至 10 i 10i 在它們的左數第二位 右數第...

整數中1出現的次數

題目 求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。從1到n整數...