求数字的个数方式

求1-n当中x出现的次数问题

试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤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 次。

关键点

  1. 如果之后两位数,比较简单
  2. 其中需要考虑到有三位数、四位数、甚至是多位数的情况 就有点复杂
  3. 解决方法 a, 用字符串 b. 不断的舍去最后一位即可
字符串的方式,代码如下
#include <iostream>

using namespace std;

int main()
{
    long sum,total=0;
    int m;
    string s;
    cin>>sum>>m;
    for(long i=0;i<=sum;i++)
    {
        s+=to_string(i);
    }
    long k=s.length();
    for(long i=0;i<k;i++)
    {
        if(s[i]-48==m)
            total++;
    }
    cout<<total<<endl;

    return 0;
}
直接求余数的方法来自洛谷,个人觉得思路十分不错,故做好笔记。
#include<iostream>
using namespace std;
int main()
{
    long long n,i,x,b,c,t=0;
    cin>>n>>x;//输入范围与要查的数字;
    for(i=1;i<=n;i++)//一到n进行循环;
    {
        b=i;//为了不改变i的值,就把i赋值给一个数;
        while(b!=0)//如果b不等于0,继续循环;
        {
            c=b%10;//求是否是x,是的话计数器加一;
            b=b/10;//求下一个数字是否为x;
            if(c==x) t++;//计数器加一;
        }
    }
    cout<<t<<endl;//输出计数器的数字;
    return 0;//结束
}

每个数字直接不断的除10,然后求余 方法不错

发布了10 篇原创文章 · 获赞 3 · 访问量 3909

猜你喜欢

转载自blog.csdn.net/QT_continue/article/details/102155166