方法一:时间复杂度高
#include <iostream>
#include <cstring>
#include<vector>
#include<queue>
#include <math.h>
using namespace std;
int calculate(int n)
{
int num = 0;
while(n)
{
if(n%10==1) num++;
n = n/10;
}
return num;
}
int numberOfOne(int n)
{
int num = 0;
for(int i=1; i<=n; i++)
{
num+= calculate(i);
}
return num;
}
int main()
{
int n;
while(1)
{
cin>>n;
cout<<"n="<<numberOfOne(n)<<endl;
}
return 0;
}
方法二:
#include <iostream>
#include <cstring>
#include<vector>
#include<queue>
#include <math.h>
using namespace std;
int pow10(int n)
{
int sum = 1;
for(int i=0;i<n;i++) sum*=10;
return sum;
}
int calculate(int a,int n)
{
int num = 0;
if(n>0)
{
int tmp = pow10(n-1);
// cout<<"tmp="<<tmp<<endl;
num += n*a*tmp;
}
if(a>1)
{
num+= pow10(n);
}
cout<<"num="<<num<<endl;
return num;
}
int numberOfOne(char a[],int n)
{
int num = 0;
for(int i=0; i<n; i++)
{
if(a[i]=='0')continue;
else
{
if(a[i]=='1')
{
int t = 0;
for(int j=i+1; j<n; j++) t = t*10 + a[j]-'0';
t++;
cout<<"t="<<t<<endl;
num+=t;
}
num += calculate(a[i]-'0',n-1-i);
}
}
return num;
}
int main()
{
char a[100];
int n;
while(1)
{
memset(a,n,'0');
cin>>n;
cin>>a;
cout<<numberOfOne(a,n)<<endl;
}
return 0;
}