题意:
就是求1^n+2^n+……+m^n的末尾有几个0!
本题看是非常困难,看到数据之庞大!我首先想到用高精度来写,但发现不可行,如果能过,也会超时。但静心一想这个数的末尾的0不会很多,而末尾的0主要是受个位上的数受影响!那么我们就没有必要把这个数算出来就直接算后几位就可以!!
AC代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <queue>
#include <cstdio>
#include <cmath>
#include <string>
#include <stack>
#include <cctype>
using namespace std;
long long fun(long long a,long long p,long long m)
{
if(p==0)
return 1;
long long r=a%m;
long long k=1;
while(p>1)
{
if((p&1)!=0)
{
k=(k*r)%m;
}
r=(r*r)%m;
p>>=1;
}
return (r*k)%m;
}
int main()
{
long long m,n;
while(cin>>m>>n)
{
long long i;
long long sum=0;
for(i=1;i<=m;i++)
{
sum+=fun(i,n,1000000000);
}
long long k=0;
while(sum)
{
if(sum%10!=0)
break;
if(sum%10==0)
k++;
sum/=10;
}
//printf("%d\n",k);
cout<<k<<endl;
}
return 0;
}