//采用最直接的方法,时间复杂度为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; }
时间: 2024-11-06 03:42:59