洛谷p1980
计数问题
题目描述
试计算在区间 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从个位到最高位的位数。