| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
AC的代码,大家来看看,嘿嘿#include<stdio.h>
unsigned int a[]={1,10,100,1000,10000,100000,1000000,
10000000,100000000,1000000000,};
int b[]={0,1,11,192,2893,38894,488895,5888896,68888897,788888898};
int c[]={0,1,20,300,4000,50000,600000,7000000,80000000,900000000};
unsigned int zero(unsigned int k)
{
unsigned int kk,i,j,sum=0;
if(k==0) return 0;
for(i=9;i>=0;i--)
if(a[i]<=k) break;
kk=k-a[i];
while(kk>=a[i])
{
kk-=a[i];
sum++;
}
for(j=i-1;j>=0;j--)
if(a[j]<=kk) break;
sum=c[i]*sum+b[i]+(i-j-1)*kk;
while(j!=-1) sum+=(a[j--]-1);//这里本来是这样写的:for(i=j;i>0;i--) sum+=a[i]-1;结果一直在耗内存,原来用无符号数的时候如果j==-1的话直接认为是个很大的数,所以无限在循环,兄弟们要注意啊。
return (sum+zero(kk));
}
int main()
{
unsigned int m,n;
scanf("%u %u",&m,&n);
while(m!=-1)
{
if(m==0) printf("%u\n",zero(n)+1);
else printf("%u\n",zero(n)-zero(m-1));
scanf("%u %u",&m,&n);
}
return 0;
}
注:b[i]表示从0到a[i]有多少个0,c[i]表示从a[i]+1到2*a[i]有多少个0
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator