一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。
编程任务:给定表示书的总页码的10 进制整数n (1≤n≤10^9) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。
输入: 每个输入只有1 行,给出表示书的总页码的整数n。
输出: 程序运行结束时,输出有10行,在第k行输出页码中用到数字k-1 的次数,k=1,2,…,10。
double string_to_num(string str)
istringstream instr(str);
int countNum[10] = {0};//保存统计结果
double num = string_to_num(pageNum);
for(int i = 1; i <= int(num); i++)
const char* p = pageNum.c_str();
for(int i = 0; i < len; i++)
int curPosNum = int( *(p+i) ) - 48;//当前处理位置上的数字
mm = pow(10.0,len-i-2) * (len-i-1);//由书上公式得f(n-1)=(n-1)pow(10,n-2)
for(int j = 0; j < curPosNum; j++)
for(int k = 0; k < 10; k++)
countNum[j] += pow(10.0,len-i-1);
for(int m = 0; m < posNum.size(); m++)
countNum[tt] += ( pow(10.0,len-i-1)*curPosNum );
posNum.push_back(curPosNum);
for(int j = 0; j < len-1; j++)
countNum[0] = countNum[0] - (len-j-1)*pow(10.0,j)*9.0;
for(int m = 0; m < posNum.size(); m++)
for(int n = 1; n <= curPosNum; n++)
for(int mn = 0; mn < posNum.size(); mn++)
for(int i = 0; i < 10; i++)
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/12/14/1354780.html,如需转载请自行联系原作者