晚餐不会高精度,求教

P1009 [NOIP1998 普及组] 阶乘之和

GuiyuanCo @ 2023-09-15 21:21:13

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    int a[100]={0},b[100]={0};
    a[1]=0;
    a[0]=1;
    b[0]=1;
    b[1]=1;
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=i;j++)
        {
            for (int k=1;k<=b[0];k++)
            {
                b[k]*=j;
                if (b[k]>10)
                {
                    b[k]-=10;
                    b[k+1]++;
                    if (k==b[0])
                    {
                        b[0]++;
                    }
                }
            }
        }
        a[0]=max(a[0],b[0]);
        b[0]=0;
        for (int j=1;j<=a[0];j++)
        {
            a[j]+=b[j];
            b[j]=0;
            if (a[j]>10)
            {
                a[j]-=10;
                a[j+1]++;
                if (j==a[0])
                {
                    a[0]++;
                }
            }
        }
    }
    for (int i=a[0];i>0;i--)
    {
        cout<<a[i];
    }
}

by sjr3065335594 @ 2023-09-15 22:20:29

在做乘法的时候先把每一位都计算出来再统一处理进位,不要边乘边进位


by sjr3065335594 @ 2023-09-15 22:22:22

而且乘法一次可能不止进一位


by sjr3065335594 @ 2023-09-15 22:27:45

还有你每次i循环会把b都变成0但实际上b[0]和 b[1] 应该是1


by sjr3065335594 @ 2023-09-15 22:28:18

进位的条件是大于等于10而不是大于10


by sjr3065335594 @ 2023-09-15 22:33:22

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    int a[100]={0},b[100]={0};
    a[1]=0;
    a[0]=1;
    b[0]=1;
    b[1]=1;
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        b[1]=b[0]=1;
        for (int j=1;j<=i;j++)
        {
            for (int k=1;k<=b[0];k++)
            {
                b[k]*=j;
            }
            for (int k=1;k<=b[0];k++)
            {
                if (b[k]>=10)
                {
                    b[k+1]+=b[k]/10;
                    b[k]%=10;
                    if (k==b[0])
                    {
                        b[0]++;
                    }
                }
            }
        }
        a[0]=max(a[0],b[0]);
        b[0]=0;
        for (int j=1;j<=a[0];j++)
        {
            a[j]+=b[j];
            b[j]=0;
            if (a[j]>=10)
            {
                a[j+1]+=a[j]/10;
                a[j]%=10;
                if (j==a[0])
                {
                    a[0]++;
                }
            }
        }
    }
    for (int i=a[0];i>=1;i--)
    {
        cout<<a[i];
    }
}

by GuiyuanCo @ 2023-09-16 07:07:14

@sjr3065335594 好的谢谢


|