P1591 阶乘数码

P1591 阶乘数码

只能説對高精度的理解還不夠,除了打板子但凡變成高精乘單精就懵逼了。

摘了一篇題解的代碼來理解

#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;
}
posted @ 2023-09-27 17:53  加固文明幻景  阅读(29)  评论(0编辑  收藏  举报  来源