//采用最直接的方法,时间复杂度为O(N*logN);
/*#include <iostream>
#include<typeinfo>
#include<specstrings.h>
#include<string>
using namespace std;
int num_one(int n)
{
int count=0;
while(n)
{
count+=(n%10==1)?1:0;
n/=10;
}
return count;
}
int core(int num)
{
int i=1;
int count=0;
for(;i<=num;++i)
{
count+=num_one(i);
}
return count;
}
int main()
{
cout<<core(10)<<endl;
system("pause");
return 0;
}*/
//下面采取对每位进行分析的方法对来求的1的个数
#include<iostream>
using namespace std;
int num_one(int n)
{
int count=0;
int low=0;
int cur=0;
int high=0;
int factor=1;
while(n/factor!=0)
{
low=n-(n/factor)*factor;
cur=(n/factor)%10;
high=n/(factor*10);
switch(cur)
{
case 0:
count+=high*factor;
break;
case 1:
count+=high*factor+low+1;
break;
default :
count+=(high+1)*factor;
break;
}
factor*=10;
}
return count;
}
int main()
{
cout<<num_one(5)<<endl;
system("pause");
return 0;
}
编程之美中1的个数的问题
最新推荐文章于 2019-08-08 23:29:00 发布