zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    设计模式之《工厂方法》
    设计模式之 《简单工厂》
    fegin 调用源码分析
    ajax上传预览
    ajax小应用
    ajax执行流程1
    ajax异步post方法
    ajax get异步方法
    js ajax请求流程
    form表单提交
  • 原文地址:https://www.cnblogs.com/zsboy/p/3103515.html
Copyright © 2011-2022 走看看