简单思路:算出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);ios
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%)spa
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; }