题目描述
试计算在区间 1 到 n的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1到11中,即在1,2,3,4,5,6,7,8,9,10,11中,数字 1 出现了 4 次。
输入格式
2个整数n,x,之间用一个空格隔开。
输出格式
1个整数,表示x出现的次数。
输入输出样例
输入
11 1
输出
4
说明/提示
对于 100%的数据,1≤ n ≤ 1,000,000, 0≤x≤9。
一道卡了亿点点久的题。
学到了:
1、问啥答啥:
问的是出现的x的次数,就没必要把0~9都算一遍再输出x的次数。
2、用影子计算:(我把相同且专门用来运算的变量取名为“影子”)
题中要用i进行计算和判断,若直接i=i%10这种,则整个循环的次数也会改变。答案就一定是错的。应该:b=i;b=b%10;这种。
3、a%10得到的是最后一位的数字。
(我好菜,现在才完全意识过来)
4、注意int的性质。即,不用减去余数再除以10,直接除以10,一样的。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x,temp=0,a,b;
cin>>n>>x;
for(int i=n;i>0;i--)
{
if(i>9)
{
b=i;
while(b!=0)
{
a=b%10;
if(a==x) temp++;
b=b/10; //妙!i直接除以10就相当于减去余数除以10!
}
}
else
{
if(i==x) temp++;
}
}
cout<<temp;
return 0;
}