题解 P1980 【计数问题】

2018-08-26 21:51:33


看了楼下大佬的题解,发现没有人用snprintf,故发了这篇蒟蒻题解

snprintf 传入四个参数

  1. 要写入的字符数组
  2. 数组大小(一般用sizeof(ch)
  3. 要转的数的格式(和printf()类似)
  4. 要转的数
该函数常用来快捷的 将数转存于字符数组中,方便好用

再将数转为字符数组后,一位一位的判就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++)
    {
        //总个数加上当前数i中x的数量
        tot+=zh(i);
    }
    //输出
    cout<<tot;
    return 0;
}

求过