求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 次。
关键点
- 如果之后两位数,比较简单
- 其中需要考虑到有三位数、四位数、甚至是多位数的情况 就有点复杂
- 解决方法 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,然后求余 方法不错