编程之美中1的个数的问题

来源:互联网 发布:六维空间 mac 编辑:程序博客网 时间:2024/06/06 21:59
//采用最直接的方法,时间复杂度为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;}

0 0
原创粉丝点击