竞赛讨论区 > 【经典数页码数字问题】
头像
JYXC
发布于 2022-05-11 09:22
+ 关注

【经典数页码数字问题】

#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) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐