题目描述
试计算在区间 111 到 nnn 的所有整数中,数字 xxx(0≤x≤90\le x\le90≤x≤9)共出现了多少次?例如,在 111 到 111111 中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 111 出现了 444 次。
输入格式
222 个整数 n,xn,xn,x,之间用一个空格隔开。
输出格式
111 个整数,表示 xxx 出现的次数。
样例输入
11 1
样例输出
4
提示
对于 100%100\%100% 的数据,1≤n≤1061\le n\le 10^61≤n≤106,0≤x≤90\le x \le 90≤x≤9。
思路分析
0≤x≤90\le x \le 90≤x≤9 ,说明 x 可以是整数的一个数位。
首先,如何查看一个整数 a 的每一个数位呢?这就要用到“数位分离”方法了。
while(a>0){
a % 10; //获取整数a的个位
a /= 10; //去掉整数a的个位
}
在while循环中,如果发现 a%10 == x 成立,就说明x在a中出现了1次。如果发现一次,计数器就增加1,那么while循环结束后,计数器中就统计出了整数a中出现了几次x。
先在要统计 1 ~ n 的所有整数中,x总共出现了多少次。首先可以让for循环的循环变量 i 从1 变化到n,就可以遍历 1 ~ n 的整数了。
然后,循环体中,使用数位分离查看变量 i 中的每一个数位,是x,计数器就增加1。
注意: 循环体中要先将变量 i 的值赋值给一个临时变量,比如 t 。然后对 t 进行数位分离。否则 i 的值被修改了,就不能遍历 1 ~ n 的整数了。
参考代码
/*
枚举、数位分离
*/
#include<iostream>
using namespace std;
int main() {
int n,x,tot=0;
cin>>n>>x;
for(int i=1; i<=n; i++) {
int t = i; //先将i的值赋值给变量 t
//对 t 进行数位分离
while(t>0) {
if(t%10==x) tot++;
t/=10;
}
}
cout<<tot;
return 0;
}

文章描述了一个编程问题,要求计算在1到n的整数范围内,数字x出现的次数。解决方案涉及到使用‘数位分离’的方法,通过循环遍历每个数并检查其数位来统计x的出现频率。提供的C++代码示例展示了如何实现这一过程。
846

被折叠的 条评论
为什么被折叠?



