为啥输出都是零?

P1591 阶乘数码

hema5177 @ 2022-04-17 10:41:18

#include<iostream>
#include<cstring>
using namespace std;
int x[100001],b,t,a;
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>a>>b;
        memset(x,0,sizeof(x));
        x[1]=1;
        int d=0,q=1;
        for(int i=2;i<=a;i++)
        {
            d=0;
            for(int j=1;j<=q;j++)
            {
                x[j]=x[j]*i+d;
                d=x[j]/10;
                x[j]%=10;
            }
            while(d>0)
            {
                x[q]=d%10;
                d/=10;
                q++;
            }
            q--;
        }
        long long sum=0;
        for(int i=q;i>=1;i--)
        {
            if(x[i]==b) sum++;
        }
        cout<<sum<<endl;
    }
}

by _maojun_ @ 2022-04-17 12:45:59

你把q--放到for外面试试。

for(int i=2;i<=a;i++)
{
    d=0;
   for(int j=1;j<=q;j++)
   {
      x[j]=x[j]*i+d;
      d=x[j]/10;
      x[j]%=10;
   }
   while(d>0)
   {
      x[q]=d%10;
      d/=10;
      q++;
   }
}
q--;

不然每次的第一个x[q]都会覆盖上次的最后一个。


by hema5177 @ 2022-04-17 13:36:42

@maojun 成0 1 了


by hema5177 @ 2022-04-17 15:07:00

找到问题了,原来要先让q++,然后再算进位,不用q--


by _maojun_ @ 2022-04-17 17:54:53

嗯……


|