基準時間限制: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
直接上結論。
一個數的一個位數如果是0,則1的個數為這個數的高位*位數如果是1則是這個數的低位再加一加上高位*位數大于1則是(高位+1)*位數#include<stdio.h>#define LL long longint main(){ int n; while(~scanf("%d",&n)) { int i = 1; LL k = 0; while(n >= i) { k += n/(10*i) * i; if((n/i%10) > 1) { k += i; } if((n/i%10) == 1) { k += n%i + 1; } i *= 10; }新聞熱點
疑難解答