题解 P1591 【阶乘数码】

一道高精度好题

高精度乘单精度,应该不是很难吧……

但是数组开小了就会RE:

所以还是开大点的好……

#include <bits/stdc++.h>
using namespace std;
int c[100000];
int main()
{
  int t,n,a;
  cin>>t;
  for(int i=0; i<t; i++)
  {
    cin>>n>>a;
    memset(c,0,sizeof(c));
    c[0]=1;
    int l=1;
    for(int j=2; j<=n; j++)//开始阶乘计算
    {
      int w=0;
      for(int k=0; k<l; k++)//高精度乘单精度
      {
        c[k]=c[k]*j+w;
        w=c[k]/10;
        c[k]%=10;
      }
      while(w>0)//处理多进位
      {
        c[l]=w%10;
        l++;
        w/=10;
      }
    }
    int sum=0;
    for(int j=0; j<l; j++)
      if(c[j]==a) sum++;//统计个数
    cout<<sum<<endl;
  }
  return 0;
}

数组开成100000后:

完美AC

886~~~

猜你喜欢

转载自www.cnblogs.com/oierscw/p/12548500.html
今日推荐