题目来源:牛客网
[编程题] 页码统计 牛牛新买了一本算法书,算法书一共有n页,页码从1到n。牛牛于是想了一个算法题目:在这本算法书页码中0~9每个数字分别出现了多少次? 输入描述 : 输入包括一个整数n(1 ≤ n ≤ 1, 000, 000, 000)
输出描述 : 输出包括一行10个整数,即0~9这些数字在页码中出现的次数,以空格分隔。行末无空格。
输入例子 : 999
输出例子 : 189 300 300 300 300 300 300 300 300 300
#include <stdio.h> #include <iostream> using namespace std; int sum(int n1, int n) { int icount = 0; long ifactor = 1; int ilowernum = 0; int icurrnum = 0; int ihighnum = 0; while (n / ifactor != 0){ ilowernum = n - (n / ifactor)*ifactor; icurrnum = (n / ifactor) % 10; ihighnum = n / (ifactor * 10); if (icurrnum < n1) { icount += ihighnum*ifactor; } else if (icurrnum == n1) { icount += ihighnum*ifactor + ilowernum + 1; } else if (icurrnum>n1) { icount += (ihighnum + 1)*ifactor; } ifactor *= 10; } return icount; } int sum0(int n) { int icount = 0; long ifactor = 1; int ilowernum = 0; int icurrnum = 0; int ihighnum = 0; while (n / ifactor != 0){ ilowernum = n - (n / ifactor)*ifactor; icurrnum = (n / ifactor) % 10; ihighnum = n / (ifactor * 10); if (ihighnum > 0) { if (icurrnum == 0) icount += (ihighnum - 1)*ifactor + ilowernum + 1; else icount += ihighnum*ifactor; ifactor *= 10; } else break; } return icount; } int main(){ int n = 0; cin >> n; cout << sum0(n); for (int i = 1; i < 10; i++) { cout << " " << sum(i, n); } return 0; }