p1848 记数问题

Posted archemiya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 出现的次数。

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

代码
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变量都会被重置。

以上是关于p1848 记数问题的主要内容,如果未能解决你的问题,请参考以下文章

将科学记数法转换为十进制记数法

如何在 Perl 中转换科学记数法和十进制记数法?

如何将科学记数法转换为十进制记数法?

使用 Matlab 避免科学记数法

在 Gnuplot 中关闭科学记数法

matlab科学记数法问题