给出一段区间a-b,统计这个区间内0-9出现的次数。

比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次。
 

输入

两个数a,b(1 <= a <= b <= 10^18)

输出

输出共10行,分别是0-9出现的次数

输入样例

10 19

输出样例

1
11
1
1
1
1
1
1
1
1 解:被这道题卡了好久。。。最后自己找了个数模拟了一边流程。
举个例子简单说说:对于数5314,我们可以将它拆分为【5310-5314】【5300-5309】【5000-5299】【0-4999】(注意删去前置0)这几个区间计算,以此得出答案。
 #include <stdio.h>
#include <string.h>
#include <math.h> long long num[][],res,a,b; void func(long long *tmp,long long *p,long long power)
{
if (power == ) res = ;
int t = *tmp % ;
if (*tmp == )
{
int n = log10((double)power);
power /= ;
for (int i = ; i < n; ++i) p[] -= * (power /= ) * i;
p[] -= n - ;
return;
}
*tmp /= ;
if (res == ) t++;
long long v= (long long)log10((double)power) * power / * t;
for (int i = ; i >= t; --i) p[i] += v;
for (int i = ; i < t; ++i) p[i] += power + v;
p[t] += res;
res += t * power;
func(tmp, p, power * );
return;
}
int main()
{
while (scanf_s("%lld%lld", &a, &b) != EOF)
{
memset(num, , sizeof num);
a--;
func(&a, num[], );
func(&b, num[], );
for (int i = ; i < ; ++i) printf("%lld\n", num[][i] - num[][i]);
}
return ;
}
当然也可以分别计算0-9的个数,但我不想继续琢磨了。。。

最新文章

  1. PyQt4入门学习笔记(二)
  2. WebView cookie 管理
  3. 彻底理解ThreadLocal二
  4. 完成卸载vs2010后再安装
  5. 简单的linux命令笔记
  6. jQuery下的显示和隐藏
  7. .net项目IIS、VS 附加进程调试
  8. c++ 17介绍
  9. sharepoint 2010 在自定义列表的字段上增加功能菜单
  10. 【Demo 0007】Java基础-类扩展特性
  11. js数组之迭代方法
  12. xctf的一道题目(77777)
  13. http的CA证书安装(也就是https)
  14. javascript函数式编程一例分析
  15. http跳转htts的htaccess文件设置
  16. js string和number
  17. jQuery 基础语法
  18. Session提要
  19. Python—生成器
  20. Confluence 6 外部小工具在其他应用中设置可信关系

热门文章

  1. flex中dispatchEvent的用法(自定义事件) .
  2. js团购倒计时函数代码
  3. const成员函数总结
  4. 使用脚本删除ios工程中未使用图片
  5. MFC 的 Picture Control 加载 BMP/PNG 图片的方法
  6. gradle配置远程仓库(以及使用本地maven仓库)
  7. Release Candidate
  8. SpringMVC配置环境
  9. Java虚拟机一览表
  10. 【hdu 2222】Keywords Search