【经典数页码数字问题】

#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%通过。哪位大佬可以帮忙找找问题出在哪?
全部评论
添加循环输入即可
点赞 回复 分享
发布于 2022-05-11 09:39

相关推荐

不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
06-20 21:22
已编辑
门头沟学院 Java
纯真的河老师在喝茶:答应了就跑啊,实习随便跑啊,别被pua了,md就是找个廉价劳动力,还平稳过度正式工,到时候跟你说没转正
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务