第30題 在從1到n的整數中1出現的次數

2022-09-08 10:06:12 字數 1292 閱讀 2476

github:

分析 這題寫幾個數好好觀察下就會發現類似於數字的排列組合問題,比如數字2016,從右往左算:

將四種情況相加,則得總共有1609種組合方式。由以上的分析可以推出乙個計算公式,取每一位分三種情況進行判斷。

**

package test030;

/** * created by cq on 2015/7/4.

* 第30題:輸入乙個整數n,從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,

* 從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次。

*/public

class

test030 }}

return count;

}//類似於排列組合的方法,將每一位為1時其他位可能的組合相加

public

static

intgetnumofone(int n)

string tmp = integer.tostring(n);

int digits = tmp.length(), count = 0;

long pre = 0, suf = 0, curdigit = 0, tmp1 = 10, tmp2 = 1;

for (int i=1; i<=digits; i++)

//當前位之前部分*10^當前位之後部分的位數+當前位之後部分+1

else

if (curdigit == 1)

//(當前位之前部分+1)*10^當前位之後部分的位數

else

tmp2 = tmp1;

tmp1 *= 10;

}return count;

}public

static

void

main(string args)

}

執行結果

connected to

the target vm, address: '127.0.0.1:25621', transport: 'socket'

disconnected from

the target vm, address: '127.0.0.1:25621', transport: 'socket'

列舉法執行結果:1609

列舉法執行了 730781 ns

組合法執行結果:1609

組合法執行了 74105 ns

process finished with exit code 0

在從1到n的正數中1出現的次數

題目 輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。我的思路是計算每一位上1會出現在哪些數字中。建乙個陣列a n 放置每一位,從個位到最高位,0 n,這裡n 4。a 0 5,a 1 0,a ...

在從1到n的正數中1出現的次數

int count1in1ton int n return n int countnumber1 int n return count 程式設計之美上的方法 大體的思路是這樣的 假設n abcde,這裡a,b,c,d,e分別是十進位制數n的各個位數上的數字。如 果要計算百位上出現1的次數,它會受到三...

求在從1到n的正數中1出現的次數

題目 輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。問題描述 給定乙個十進位制正整數n,寫下從1開始,到n的所有整數,然後數一下其中出現的所有 1 的個數。例如 n 2,寫下1,2。這樣只出...