题目:试计算在区间 11 到 nn 的所有整数中,数字 xx(0\le x\le90≤x≤9)共出现了多少次?例如,在 11 到 1111 中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 11 出现了 44 次。
第一次写出来的代码,运行出来只有30分,虽然结果对,但不ac。
#include<stdio.h>
int main()
{
int n,x,i,p;
p=0;
int a[11];
scanf("%d%d",&n,&x);
for(i=1;i<=n;i++)
{
if(i<10)
{
if(i==x)
p++;
}
if(i>=10)
{
if(i%10==x)
p++;
if(i/10==x)
p++;
}
}
printf("%d",p);
}
错在只考虑了两位数的情况,注意题目给的范围,是个大的整数,不局限于两位数,
正确代码如下
#include<stdio.h>
int main()
{
int n,x,i,p,b,a;
p=0;
scanf("%d%d",&n,&x);
for(i=1;i<=n;i++)
{
b=i;
while(b)
{
a=b%10;
if(a==x)
p++;
b=b/10;
}
}
printf("%d\n",p);
return 0;
}