一本书n页的页码连续编号,则数字0到9在页码中各出现多少次?用c++编程,n自己输入,多次数据:代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void statNum(long long sn[10], long long n)
{
long long i, c, k, s, pown;
for(int i = 0; i < 10; i++)
sn[i] = 0;
for(k=s=0, pown=1; n > 0; k++, n /=10, pown *=10)
{
c = n%10;
//先补0
//统计从个位算起前k位 0 ~ 9 个数
for(i=0; i < 10; i++)
sn[i] += c*k*pown/10;
// 统计第k+1位出现 0 ~ (c-1) 个数
for(i=0; i < c; i++)
sn[i] += pown;
// 统计第k+1位出现 c 个数
sn[c] += 1 + s;
// 去掉第k+1位补 0 个数
sn[0] -= pown;
s += c*pown;
}
}
int main(int argc , char *argv[])
{
long long sn[10], i,n;
while(cin>>n)
{
if(argc > 1)
n = atoi(argv[1]);
statNum(sn, n);
for(i=0; i < 10; i++)
cout<<sn[i]<<endl;
}
return 0;
}
不懂的可以加我的QQ群:261035036(IT程序员面试宝典
群) 欢迎你的到来哦,看了博文给点脚印呗,谢谢啦~~