题意概述
试计算在区间 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出现的次数。
本题使用
snprintf
解决
snprintf
传入四个参数
- 要写入的字符数组
- 数组大小(一般用sizeof(ch)
- 要转的数的格式(和
printf()
类似) - 要转的数
该函数常用来快捷的 将数转存于字符数组中,方便好用
再将数转为字符数组后,一位一位的判就AK了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
//int 似乎会爆 (逃)
ll n,tot=0;
ll x;
int zh(ll a)
{
//以字符数组形式存储一个数
char ch[10];
memset(ch,'0',sizeof(ch));
//将%lld形式的a自动写入字符数组
snprintf(ch,sizeof(ch),"%lld",a);
ll sum=0;
//统计符合的个数
for(int i=0;i<strlen(ch);i++)
if(ch[i]==x+'0') sum++;
return sum;
}
int main()
{
//输入
cin>>n>>x;
for(int i=1;i<=n;i++)
tot+=zh(i); //总个数加上当前数i中x的数量
cout<<tot;//输出
return 0;
}