这边建议手打高精
------------
我的代码(别抄)
```
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_LEN = 50000;
struct BigInt
{
int v[MAX_LEN];
int len;
int sign;
BigInt(int n) {
memset(v,0,sizeof(v));
if (n>=0){
sign=1;
}
else{
sign=-1;
}
int i=0;
while (true){
v[i++]=n%10;
n/=10;
if (n==0){
break;
}
}
len=i;
}
BigInt(const char* a) {
len=strlen(a);
if (a[0]=='-'){
sign=-1;
len-=1;
for (int i=0;i<=len;++i){
if (a[len-i]!='-'){
v[i]=a[len-i]-'0';
}
}
}
else{
sign=1;
for (int i=0;i<len;++i){
v[len-i-1]=a[i]-'0';
}
}
}
int compare(const BigInt& b) {
if (len<b.len){
return -1;
}
if (len>b.len){
return 1;
}
for (int i=len-1;i>=0;--i){
if (v[i]<b.v[i]){
return -1;
}
if (v[i]>b.v[i]){
return 1;
}
}
return 0;
}
void add(const BigInt& b) {
int i=0,x=0;
int blen=b.len;
while ((i<len) || (i<blen)){
v[i]=v[i]+b.v[i]+x;
x=v[i]/10;
v[i]%=10;
++i;
}
if (x > 0){
v[i]=x;
len = i + 1;
} else {
len = i;
}
}
void sub(const BigInt& b) {
int i=0,x=0,y[MAX_LEN];
int blen=b.len;
int f=compare(b);
if (f==0){
len=1;
v[0]=0;
return;
}
if (f>=1){
for (i=0;i<len;++i){
if (v[i]<b.v[i]){
v[i]+=10;
v[i+1]-=1;
}
v[i]-=b.v[i];
}
for (int i=len-1;i>=0;--i){
if (v[i]==0){
len-=1;
}
else{
break;
}
}
}
else{
for (i=0;i<len;++i){
if (b.v[i]<v[i]){
//b.v[i]+=10;
v[i+1]-1;
}
v[i]-=b.v[i];
}
for (int i=0;i<len;++i){
if (v[i]==0){
len-=1;
}
}
}
}
void mul(const BigInt& b) {
int c[MAX_LEN];
memset(c,0,sizeof(c));
for (int i=0;i<len;++i){
int x=0;
for (int j=0;j<b.len;++j){
c[i+j]=v[i]*b.v[j]+x+c[i+j];
x=c[i+j]/10;
c[i+j]=c[i+j]%10;
}
c[i+b.len]=x;
}
memcpy(v,c,sizeof(c));
len = len + b.len;
while(v[len-1]==0){
len--;
}
}
void mul(int b)
{
int x=0;
for (int i=0;i<len;++i){
v[i]=v[i]*b+x;
x=v[i]/10;
v[i]=v[i]%10;
}
while (x) {
v[len++]=x%10;
x/=10;
}
}
void div(int b,int& m) {
int x=0;
for (int i=len-1;i>=0;--i){
int t=v[i];
v[i]=(x*10+v[i])/b;
x=(x*10+t)%b;
}
m = x;
for (int i=len-1;i>=0;--i){
if (v[i]==0){
len-=1;
}
else{
break;
}
}
}
void div(int b) {
long long x=0;
for (int i=len-1;i>=0;--i){
int t=v[i];
v[i]=(x*10+v[i])/b;
x=(x*10+t)%b;
//cout << x << endl;
}
for (int i=len-1;i>=1;--i){
if (v[i]==0){
len-=1;
}
else{
break;
}
}
}
void div(const BigInt&b) {
int x=0;
for (int i=len-1;i>=0;--i){
for (int j=0;j<b.len;++j){
int t=v[i];
v[i]=(x*10+v[i])/b.v[j];
x=(x*10+t)%b.v[j];
}
}
for (int i=len-1;i>=0;--i){
if (v[i]==0){
len-=1;
}
else{
break;
}
}
}
};
std::ostream& operator<<(std::ostream& os, const BigInt& b)
{
if (b.sign<0){
cout<<"-";
}
for(int i = b.len - 1;i >= 0; --i){
os << b.v[i];
}
return os;
}
int main()
{
int t;
cin>>t;
while (t--){
int n,v,sum=0;
cin>>n>>v;
BigInt a(1);
for (int j=2;j<=n;++j){
a.mul(j);
}
for (int j=0;j<a.len;++j){
if (a.v[j]==v){
sum+=1;
}
}
cout<<sum<<endl;
}
}
```
by ikun_god @ 2024-01-31 19:15:06
@[yc123bc](/user/1082500)
by ikun_god @ 2024-01-31 19:15:20
@[ikun_god](/user/996255) 好长啊!
by yc123bc @ 2024-01-31 19:16:39
@[ikun_god](/user/996255) 除了部分,其他都看不懂
by yc123bc @ 2024-01-31 19:18:34
其实核心部份只有mul,其余是我自己备用的
by ikun_god @ 2024-01-31 19:20:15
有没有其他大佬?我想多看几种解题方式。
by yc123bc @ 2024-01-31 19:21:25
@[ikun_god](/user/996255) 刷新了我对结构体的认知
by C_plus_plus_12345 @ 2024-02-01 16:51:04
@[ikun_god](/user/996255)
666
by qqq123456qqq @ 2024-04-06 17:37:35