试计算在区间 1 到 n的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1到11中,即在 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从个位到最高位的位数。
原文:https://www.cnblogs.com/CrossingX/p/10085798.html