1009 數字1的數量
基準時間限制:1 秒 空間限制:131072 kb 分值: 5 難度:1級演算法題 收藏 關注
給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。
例如:n = 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。
input
輸入n(1 <= n <= 10^9)
output
輸出包含1的個數
input示例
12 output示例
5首先這是乙個規律的問題 ,
比如1111
首先 我們要知道1000 含有的數字1的個數是301個
因為個位,十位,百位,每位提供了100個1的數量, 千位數提供了乙個1的數量
然後 後面還有111 從1000到1111 又多出了111個1 所以在1111中 千位段提供的1的數量是301+111;
然後 111 中 100含有21個1的數量, 11 多出了11個1的數量 所以百位段提供的是 21+11;
然後 11 10提供了2個1,後面個為1為十位多提供了乙個1 所以十位段是 2+1;
個位段 1
所以最後的數量是
301+111+21+11+2+1+1 =448;
邏輯就是這樣
如果2000呢
2000含有1的數量是1600個
首先 1 到999提供了 300個1
從1000 到2000中
個位,十位,百位 各提供了100個1
但是千位提供了1000個1
所以 2000 就是 300+1000+300;
那麼3000就是 300+1000+300+300;
規律就是這樣
貼**防止自己忘
#include
#include
#include
using
namespace
std;
int main()
long
long y=i;
//coutlong
long s=0;
while(x>0)
else
if(x/l>1)
x=x%l;
l=l/10;
y--;
}cout
<}
}
51 nod 1009 數字1的數量
1009 數字1的數量 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 收藏 關注 給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。例如 n 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。input ...
51nod 1009 數字1的數量
1009 數字1的數量 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。例如 n 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。input 輸入n 1 ...
51nod 1009 數字1的數量
1009 數字1的數量 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法 給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。例如 n 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。input 輸入n 1 n...