Poj 3286 How many 0's?

http://poj.org/problem?id=3286

题意:计算从[a,b]期间中总共有多少个0。

思路:比如1234,我们计算1到1234总共出现了多少个0,。
         当个位有0的时候,出现了123次
         当十位有0的时候,出现了12*10次

         当百位有0的时候,出现了1*100次

         但是若为1204,在计算十位0的个数的时候,是11*10+5,因为当前面是12的时候,最后一位只能取0-4,刚好5个

复制代码
 1 #include<stdio.h>
 2 #include<string.h>
 3 using namespace std;
 4 typedef long long LL;
 5 LL ab[20];
 6            
 7 LL Solve(LL n)
 8 {
 9     LL sum=1;
10     if(n<0) return 0;
11     for(int i=1;i;i++)
12     {
13         if(ab[i]>n) break;
14         LL front=n/ab[i];
15         LL after=n%ab[i-1];
16         LL now=(n%ab[i]-n%ab[i-1])/ab[i-1];
17         if(now==0) sum+=(front-1)*ab[i-1]+after+1;
18         else sum+=front*ab[i-1];
19     }
20     return sum;
21 }
22            
23 int main()
24 {
25     LL a,b;
26     ab[0]=1;
27     for(int i=1;i<15;i++) ab[i]=ab[i-1]*10;
28     while(scanf("%lld%lld",&a,&b)!=EOF)
29     {
30         if(a==-1 && b==-1) break;
31         LL ans1=Solve(a-1);
32         LL ans2=Solve(b);
33         printf("%lld\n",ans2-ans1);
34     }
35     return 0;
36 }
复制代码

 

posted @   calmound  阅读(266)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2012-05-28 SPOJ NWERC11B Bird tree
2012-05-28 SDIBT 1046 Primary Arithmetic
点击右上角即可分享
微信分享提示