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;
}