p1848 记数问题

题干描述
试计算在区间 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 出现的次数。

思路
起初一直想着有没有什么捷径来解答,想了半天也没发现什么简便的方法,转向使用穷举法。开始使用字符串来解答此题,但是需要使用字符串数组,比较麻烦,后来发现模运算非常方便,故答题如下

代码

 1 int main(){
 2     int j,n,x,num=0;
 3     scanf("%d %d",&n,&x);
 4     for(int i=1;i<=n;i++){
 5         j=i;
 6         while(j){
 7             if(j%10==x)
 8                 num++;
 9             j/=10;
10         }
11     }
12     printf("%d",num);
13     return 0;
14 }

truobleshoot

第一次做题遇到一个“匪夷所思”的问题,感觉思路没有问题,但是程序一直不出结果,debug的时候发现死循环了

1 for(int i=1;i<=n;i++){
2   while(i){
3     if(i%10==x)
4       num++;
5     i/=10;
6   }
7 }

每次跳出while循环的时候i就会被重置成0,起初一直没发现问题所在,以为自己对for循环理解错了,仔细debug发现while使用的是for循环中的全局变量i,每次跳出while的时候i变量都会被重置。

原文地址:https://www.cnblogs.com/archemiya/p/8472378.html