求1到N之间出现了几次数字x(x为1到9)
思想:
假设5位数n=abcde,看百位c出现x的次数为:
ab=abcde/(100*10);
cde=abcde-abcde/100*100
当c<x时,那么count(c)的次数为:ab*100
当c=x时,那么count(c)的次数为:ab*100+cde+1
当c>x时,那么count(c)的次数为:(ab+1)*100
代码如下
#include <iostream>
using namespace std;
int count_x(int n,int x){
if(x<0||x>9)
return 0;
int count = 0;
int factor = 1;
int low = 0, cur = 0, high = 0;
while(n/factor != 0){
low = n - (n/factor) * factor;//低位数字
cur = (n/factor) % 10;//当前位数字
high = n / (factor*10);//高位数字
if(cur<x)
count += high * factor;
if(cur==x)
count += high * factor + low + 1;
if(cur>x)
count += (high + 1) * factor;
factor *= 10;
}
return count;
}
int main(){
int n,x;
cout<<"输入n x(1-9):"<<endl;
cin>>n>>x;
cout<<"1到"<<n<<"中1出现的个数="<<count_x(n,x);
system("pause");
return 0;
}