怎么第四点TLE了 我用了qmul类似快速幂一样累加做乘法
查看原帖
怎么第四点TLE了 我用了qmul类似快速幂一样累加做乘法
775551
caojiaming楼主2022/11/10 14:00
#include <bits/stdc++.h>
using namespace std;
void tos(string &a,string &b)
{
	if(a.length()<b.length())
	{
	    while(a.length()<b.length())
	    {
	        a="0"+a;
	    }
	}
	else
	{
	    while(b.length()<a.length())
	    {
	        b="0"+b;
	    }
	}
}
void delete_zero(string &a)
{
	while(a[0]=='0')
	{
		if(a=="0")
		{
			return;
		}
		a.erase(0,1);
	}
}
char toc(int i)
{
	return i+'0';
}
int toi(char c)
{
	return c-'0';
}
int lar(string a,string b)
{
	tos(a,b);
	if(a==b)
	{
		return 0;
	}
	if(a[0]>b[0])
	{
		return 1;
	}
	if(a[0]<b[0])
	{
		return -1;
	}
	a.erase(0,1);
	b.erase(0,1);
	return lar(a,b);
}
string add(string,string);
string add(string a,string b)
{
	tos(a,b);
	int l=a.length();
	bool flag=0;
	for(int i=l-1;i>=0;i--)
	{
		int d1=toi(a[i]);
		int d2=toi(b[i]);
		int d3=d1+d2;
		if(d3>=10)
		{
			d3-=10;
			if(i)
			{
				a[i-1]++;
			}
			else
			{
				flag=1;
			}
		}
		a[i]=(toc(d3));
	}
	return flag?("1"+a):a;
}
string qmul(string a,int b)
{
    if(b==0)
    {
        return "0";
    }
    if(b%2==0)
    {
        string temp=qmul(a,b/2);
        return add(temp,temp);
    }
    return add(qmul(a,b-1),a);
}
string jc(int n)
{
	if(n==1||n==0)
	{
		return "1";
	}
	return qmul(jc(n-1),n);
}
int main()
{
	int t;
	scanf("%d",&t);
	string ans="";
	for(int i=0;i<t;i++)
	{
	    int n;
	    int a;
	    scanf("%d%d",&n,&a);
	    ans=jc(n);
	    int cnt=0;
	    for(int j=0;j<ans.length();j++)
	    {
	        if(ans[j]==toc(a))
	        {
	            cnt++;
	        }
	    }
	    printf("%d\n",cnt);
        cnt=0;
	}
    return 0;
}
2022/11/10 14:00
加载中...