问题标题: 酷町堂:1063

0
0
已解决
吕梓瑜
吕梓瑜
初级天翼
初级天翼

请问1063这哪里错了?为什么90分?

https://ke.codingtang.com/#/problem/problemSub?id=1063

#include<iostream>
using namespace std;
const int maxn=1010;
int n,tot,len,a[maxn],f[maxn];
void mul(int x)
{
    for(int i=1;i<=len;i++)
    f[i]=f[i]*x;
    for(int i=1;i<=len;i++)
    if(f[i]>9)
    {
        f[i+1]=f[i+1]+f[i]/10;
        f[i]=f[i]%10;
    }
    while(f[len+1])
    {
        len++;
        f[len+1]=f[len+1]+f[len]/10;
        f[len]=f[len]%10;
    }
}
int main()
{
    cin>>n;
    for(int i=2;i;i++)
    {
        if(n>=i)
        a[++tot]=i,n=n-i;
        else break;
    }
    while(n)
    {
        for(int i=tot;i>=1;i--)
        if(n)
        {
            a[i]++;
            n--;
        }
        else break;
    }
    len=1;f[1]=1;
    for(int i=1;i<=tot;i++)
    mul(a[i]);
    for(int i=len;i>=1;i--)
    cout<<f[i];
    return 0;
}

请给出这样的伪代码:

或告诉我哪行哪里错了,改成什么,说思路


0
已采纳
汪宇航
汪宇航
新手启示者
新手启示者

输入文件中只有1个数n(其中1<=n<=1000)

???

我看不懂你的鸭

假如n=1000

将n分解为2、3、4、5、6、7、8、9、10、11、....

不说是最优,应该已超int了吧

改成long long试试

0
李奕歌
李奕歌
初级天翼
初级天翼

我也90

#include<iostream>
using namespace std;
const int maxn=1010;
int n,tot,len,a[maxn],f[maxn];
void mul(int x)
{
    for(int i=1;i<=len;i++)
    f[i]=f[i]*x;
    for(int i=1;i<=len;i++)
    if(f[i]>9)
    {
        f[i+1]=f[i+1]+f[i]/10;
        f[i]=f[i]%10;
    }
    while(f[len+1])
    {
        len++;
        f[len+1]=f[len+1]+f[len]/10;
        f[len]=f[len]%10;
    }
}
int main()
{
    cin>>n;
    for(int i=2;i;i++)
    {
        if(n>=i)
        a[++tot]=i,n=n-i;
        else break;
    }
    while(n)
    {
        for(int i=tot;i>=1;i--)
        if(n)
        {
            a[i]++;
            n--;
        }
        else break;
    }
    len=1;f[1]=1;
    for(int i=1;i<=tot;i++)
    mul(a[i]);
    for(int i=len;i>=1;i--)
    cout<<f[i];
    return 0;
}

 

0
0
0
我要回答