#include <bits/stdc++.h>
using namespace std;
//统计1-9出现次数的函数
long int cal_x(long long int page, int data)
{
long long int num = 0;
long long int temp = 1;
long long int formal = page;
while (page != 0)
{
//可以参考具体数字分析(当前位数字 >、=、< 统计数字三种不同情形)
//高位 0 ~ page/10-1;temp==低位数字情况数
if (page % 10 < data) num += page / 10 * temp;
//高位 0 ~ page/10-1 + 高位=page/10的情况;temp==低位数字情况数
else if (page % 10 == data) num += page / 10 * temp + (formal%temp + 1);
//高位 0 ~ page/10;temp==低位数字情况数
else num += (page / 10 + 1) * temp;
page /= 10;
temp *= 10;
}
return num;
}
//统计0出现的次数
long int cal_0(long long int page)
{
long long int num = 0;
long long int temp = 1;
long long int formal = page;
while (page != 0)
{
//当前位==0,高位可以是1~page/10-1,不能为0;temp==低位数字情况数
if (page % 10 == 0) num += (page / 10 - 1) * temp + (formal%temp + 1);
//当前位>0,高位可以是0~page/10-1;temp==低位数字情况数
else num += (page / 10) * temp;
page /= 10;
temp *= 10;
}
return num;
}
int main()
{
long long int formal;
cin >> formal;
//先计算0的次数
cout << cal_0(formal) << endl;
//计算1-9的次数
for (int i = 1; i <= 9; ++i)
cout << cal_x(formal, i) << endl;
return 0;
}
牛客网一直不通过,自己测试数据是可以获得答案的,测试结果0%通过。哪位大佬可以帮忙找找问题出在哪?
全部评论
(1) 回帖