爱丽丝·玛格特罗依德

【题目描述】

爱丽丝·玛格特罗依德有n(0 < n < 105)点魔法值,每召唤出一个『上海人形』就要消耗x点魔法,最后,它们造成的威力就是每个人形所消耗的魔法值的总积。

【输入描述】

输入一个数n。

【输出描述】

输出一个数表示最大威力。

【样例输入】

10

【样例输出】

36

【数据范围及提示】

样例中,10=2+2+3+3,36=2*2*3*3。

源代码:

#include<cstdio>
#include<cstdlib>
int n,Length=1,Ans[60000];
int Get(int T) //高精度乘法。
{
    int i[60000];
    i[1]=0;
    for (int a=1;a<=Length;a++)
    {
        Ans[a]*=T;
        Ans[a]+=i[a];
        i[a+1]=Ans[a]/10;
        Ans[a]%=10;
    }
    if (i[Length+1])
    {
        Length++;
        Ans[Length]=i[Length];
    }
}
void Solve()
{
    while (n)
      if (n==4)
      {
        n-=4;
        Get(4);
      }
      else
        if (n==2)
        {
            n-=2;
            Get(2);
        }
        else
          if (n>=3)
          {
            n-=3;
            Get(3);
          }
          else
            if (n==1)
            {
                printf("1");
                exit(0);
            }
}
int main()
{
    scanf("%d",&n);
    Ans[1]=1;
    Solve();
    for (int a=Length;a>0;a--)
      printf("%d",Ans[a]);
    return 0;
}

/*
    解题思路:
        一道红果果的数学奥赛题。尽量分成3,不足的就分成2。
*/
原文地址:https://www.cnblogs.com/Ackermann/p/5877032.html