题干描述
试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。
输入格式
输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开。
输出格式
输出共 1 行,包含一个整数,表示 x 出现的次数。
思路
起初一直想着有没有什么捷径来解答,想了半天也没发现什么简便的方法,转向使用穷举法。开始使用字符串来解答此题,但是需要使用字符串数组,比较麻烦,后来发现模运算非常方便,故答题如下
代码
int main()
{
int j,n,x,num=0;
scanf("%d %d",&n,&x);
for(int i=1;i<=n;i++)
{
j=i;
while(j)
{
if(j%10==x)
num++;
j/=10;
}
}
printf("%d",num);
return 0;
}
truobleshoot
第一次做题遇到一个“匪夷所思”的问题,感觉思路没有问题,但是程序一直不出结果,debug的时候发现死循环了
for(int i=1;i<=n;i++)
{
while(i)
{
if(i%10==x)
num++;
i/=10;
}
}
每次跳出while循环的时候i就会被重置成0,起初一直没发现问题所在,以为自己对for循环理解错了,仔细debug发现while使用的是for循环中的全局变量i,每次跳出while的时候i变量都会被重置。