51nod 1042 数字0-9的数量

来源:互联网 发布:蜂鸟众包提现网络出错 编辑:程序博客网 时间:2024/06/05 06:27

51nod 1042 数字0-9的数量
这是一开始自己想的方法 然后超时

#include<iostream>#include<cstdio>using namespace std;        void find(long long a,long long *num){        while(a){            int c=a%10;            num[c]++;            a=a/10;        }    }int main(){    long long a,b;    while(scanf("%lld%lld",&a,&b)!=EOF){        long long num[11]={0};//初始化为零         if(a<=0||b<=0)break;        for(long long i=a;i<=b;i++)find(i,num);        for(int i=0;i<10;i++)printf("%lld\n",num[i]);    }}

网上百度了别人的解决方案 感觉不错

#include <iostream>  #include<bits/stdc++.h>  #define ll long long  using namespace std;  void dfs(ll a,ll b,ll c[])  {      ll n=a/10,m=a%10,t=n;      for(int i=0;i<=m;i++)   c[i]+=b;//当前位对低位的影响      for(int i=0;i<10;i++)   c[i]+=b*n;//高位对低位的影响      c[0]-=b;//0特殊处理,将多算的0减去      while(t)//当前位对高位的影响      {          c[t%10]+=b*(m+1);//加上0          t/=10;      }      if(n)   dfs(n-1,b*10,c);//n已经处理过,所以要处理n-1  }  ll x[20],y[20];  int main()  {      ll a,b;      cin>>a>>b;      dfs(a-1,1,x);      dfs(b,1,y);      for(int i=0;i<10;i++)   cout<<y[i]-x[i]<<endl;  }
0 0
原创粉丝点击