您的位置:首页 > 其它

数字统计问题

2008-09-20 00:05 281 查看
#include <iostream>

#include <string>

#include <sstream>

#include <cmath>

#include <vector>

using namespace std;

double string_to_num(string str)

{

double back;

istringstream instr(str);

instr>>back;

return back;

}

int main()

{

int len;

double mm;

int countNum[10] = {0};

vector<int> posNum;

string pageNum;

cin>>pageNum;

double num = string_to_num(pageNum);

len = pageNum.size();

if( len <= 1 )

{

for(int i = 1; i <= int(num); i++)

countNum[i] += 1;

}

else{

const char* p = pageNum.c_str();

for(int i = 0; i < len; i++)

{

int highPosNum = int( *(p+i) ) - 48;

mm = pow(10.0,len-i-2) * (len-i-1);

if( mm != 0)

{

for(int j = 0; j < highPosNum; j++)

{

for(int k = 0; k < 10; k++)

countNum[k] += mm;

countNum[j] += pow(10.0,len-i-1);

}

if( !posNum.empty() )

{

for(int m = 0; m < posNum.size(); m++)

{

int tt = posNum.at(m);

countNum[tt] += ( pow(10.0,len-i-1)*highPosNum );

}

}

posNum.push_back(highPosNum);

if( i == 0)

{

for(int j = 0; j < len-1; j++)

countNum[0] = countNum[0] - (len-j-1)*pow(10.0,j)*9.0;

countNum[0] -= len;

}

}

else{

countNum[0] += 1;

for(int m = 0; m < posNum.size(); m++)

{

int tm = posNum.at(m);

countNum[tm] += 1;

}

for(int n = 1; n <= highPosNum; n++)

{

countNum
+= 1;

for(int mn = 0; mn < posNum.size(); mn++)

{

int tmn = posNum.at(mn);

countNum[tmn] += 1;

}

}

}

}

}

for(int i = 0; i < 10; i++)

cout<<countNum[i]<<endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: