洛谷p1980

计数问题

题目描述

试计算在区间 1 到 n的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在 111中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 11出现了 4 次。

输入输出格式

输入格式:

 

2个整数n,x,之间用一个空格隔开。

 

输出格式:

 

1个整数,表示x出现的次数。

说明

对于 100%的数据,1≤ n ≤ 1,000,000,  0 ≤ x ≤ 9

注意到说明里的内容,n≤1,000,000,故以前做这题的方法(先算出是几位数,再分别加)就失效了,故参考了题解,得出简单易懂的做法:

#include<stdio.h>
int main()
{
int x,a[10]={0},b,c;
long long n;
scanf("%lld%d",&n,&x);
for(int i=1;i<=n;i++)
{ b=i;
while(b!=0)
{
c=b%10;
b=b/10;
a[c]++;
}    
}
printf("%d",a[x]);
return 0;
}

 

其中b为代替i的量,因为i需要从1到n递增,不能变化(如i%10,i/10等),所以通过b来代替i。

c=b%10;b=b/10;依次得出的c就是i从个位到最高位的位数。

posted @ 2018-12-07 23:17  CrossingX  阅读(145)  评论(0编辑  收藏  举报