数字统计
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 29 Solved: 20
[Submit][Status][BBS]
Description
一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,
每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数
字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,
2,…,9。
Input
给出表示书的总页码的整数n(1≤n≤2^31-1)
Output
输出10行,在第k行输出页码中用到数字k-1 的次数,k=1,2,…,10。
Sample Input
11
Sample Output
1 4 1 1 1 1 1 1 1 1
水题
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include<stdio.h>
int
f(
int
n,
int
x)
{
int
count = 0;
int
factor = 1;
int
lower = 0;
int
cur = 0;
int
higher = 0;
while
((x!=0&&n/factor!=0) || (x==0&&n/factor>=10))
{
lower = n - n/factor*factor;
cur = n/factor%10;
higher = n/factor/10;
if
(x==0)
higher--;
if
(cur < x)
count += higher*factor;
if
(cur == x)
count += higher*factor + lower + 1;
if
(cur > x)
count += (higher+1) * factor;
factor *= 10;
}
return
count;
}
int
main()
{
int
n;
int
i;
int
result[10];
for
(i=0; i<10; i++)
result[i] = 0;
scanf
(
"%d"
, &n);
for
(i=0; i<10; i++)
{
result[i] = f(n, i);
printf
(
"%d\n"
, result[i]);
}
return
0;
}
/**************************************************************
Problem: 1134
User: 12310320214
Language: C
Result: Accepted
Time:0 ms
Memory:916 kb
****************************************************************/