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。這樣只出...