51nod 1042 数字0-9的数量
2024-10-18 18:13:31
给出一段区间a-b,统计这个区间内0-9出现的次数。
比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次。
Input
两个数a,b(1 <= a <= b <= 10^18)
Output
输出共10行,分别是0-9出现的次数
//给定一个数 求他百位上面出现k的次数 自行枚举找规律
//比如求0的次数
//那么分为 =0 和 > 0的情况
//=0 比如 1029 百位 出现0的有 1000-1029 30个 (before-1)*100 + after+1
//>0 比如 1129 百位 出现0的有 1000-1099 100个 (before)*100
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[]; ll Count(ll x,ll k)
{
ll i =;
ll res =;
ll before = , cur= ,after =;
while ((x/i))
{
cur = (x/i)%;
before = x/(i*);
after = x-(before*+cur)*i;
if(cur == k)
res += before*i +after+;
else if(cur < k)
res += before*i;
else
res += (before+)*i;
i*=;
}
return res;
} ll Count0(ll x)
{
ll i =;
ll res =;
ll before = , cur= ,after =;
while ((x/i))
{
cur = (x/i)%;
before = x/(i*);
after = x-(before*+cur)*i;
if(cur == )
res += (before-)*i +after+;
else
res += before*i;
i*=;
}
return res;
} int main ()
{
ll a,b;
cin >> a >> b;
dp[] = Count0(b) - Count0(a-);
cout<< dp[] <<endl;
for(int i=;i<=;i++){//统计出来1 - 9的数量了
dp[i] = Count(b,i) - Count(a-,i);
cout<< dp[i] <<endl;
}
//差一个数字0的数量 }
最新文章
- python网络爬虫 新浪博客篇
- Xamarin.Android之简单的抽屉布局
- 记录-div绝对定位针对手机浏览器的区别
- Centos6.7安装docker1.7.1
- Navi.Soft30.产品.格式化.操作手册
- 我遇到的CocoaPods的问题(也许后期会解决,持续更新)
- JDK中的并发bug?
- UITextView限制字数与行数
- linux 搭建hexo博客
- (3)Spring定时任务的几种实现
- 取消掉Transfer-Encoding:chunked
- linux exec函数家族
- 组合数学及其应用——格路径与Schroder数
- WSGI的理解
- 基于visual Studio2013解决面试题之0908最大连续数字串
- 表空间与数据文件Offline,online的区别
- 用DataRelation给多个DataTable建立关系并显示到TreeView
- SDL2源代码分析1:初始化(SDL_Init())
- C#解压文件,Excel操作
- python字典去重