简单思路:算出N位数为i,则这组数位数=1*9*10^(1-1)+2*9*10^(2-1)+3*9*10^(3-1)+--+(i-1)*9*10^(i-2)+i*(N-10^(i-1)+1);(i>1);1*9+2*90+3*900+---+i*(N-10^(i-1)+1);
1.未考虑空间时间复杂度
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
string itos(long long i) //整型转字符sstream
{
stringstream s;
s << i;
return s.str();
}
int main()
{
long long N = 0;
string s;
cin >> N;
for(long long i = 1; i <= N; i++)
{
s += itos(i);
}
cout << s.size() << endl;
return 0;
}
2.考虑时间复杂度(未验证空间时间复杂度,未测试100%)
int main()
{
long long N = 0;
while(cin >> N)
{
int i = 0;
long long count = 0;
long long temp = N;
while(temp) //计算N位数
{
i++;
temp = temp/10;
}
if(1 == i)
{
count = N;
}
else
{
for(int j = 1; j < i; j++)
{
count += j*9*pow(10,j-1);
}
count += i*(N-pow(10.0,i-1)+1); //double
}
cout << count << endl;
}
return 0;
}