悬赏一关,又臭又长的高精乘代码求调
查看原帖
悬赏一关,又臭又长的高精乘代码求调
754021
fish_love_cat楼主2023/4/25 18:38

RT

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        int a[10005]={},b[10005]={},c[10005]={}; 
        int n,x,ans=0;
    	cin>>n>>x;
    	a[1]=1;
    	int leng=sizeof(a)/sizeof(int);
    	bool f=false;
    	for(int i=2;i<=n;i++){
    	    if(!f){
        	    int xin=i;
        	    int m=1;
        	    while(xin){
        	        b[m++]=xin%10;
        	        xin/=10;
        	    }
        	    int s1len=leng;
        	    int s2len=m-1;
            	for(int i=1;i<=s1len;i++){
            		for(int j=1;j<=s2len;j++){
            			c[i+j-1]+=a[i]*b[j];
            			c[i+j]+=c[i+j-1]/10;
            			c[i+j-1]%=10;
            		}
            	}
            	leng=s1len+s2len;
            	if(c[leng]!=0){
            		leng++;
            	}
            	f=true;
    	    }else{
        	    int xin=i;
        	    int m=1;
        	    while(xin){
        	        b[m++]=xin%10;
        	        xin/=10;
        	    }
        	    int s1len=leng;
        	    int s2len=m-1;
            	for(int i=1;i<=s1len;i++){
            		for(int j=1;j<=s2len;j++){
            			a[i+j-1]+=c[i]*b[j];
            			a[i+j]+=a[i+j-1]/10;
            			a[i+j-1]%=10;
            		}
            	}
            	leng=s1len+s2len;
            	if(a[leng]!=0){
            		leng++;
            	}
    	    }
    	    f=false;
    	}
    	if(!f){
            for(int i=0;i<leng;i++){
        	    if(a[i]==x) ans++;
        	}
    	}else{
    	    for(int i=0;i<leng;i++){
        	    if(c[i]==x) ans++;
        	}
    	}
    	cout<<ans<<endl;
    }
	return 0;
}
2023/4/25 18:38
加载中...