怎么第四点TLE了 我用了qmul类似快速幂一样累加做乘法

P1591 阶乘数码

caojiaming @ 2022-11-10 14:00:31

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

by caojiaming @ 2022-11-10 14:39:53

我还真搞不懂

为什么开了O2就能AC了


|