为什么全wa!!

P1009 [NOIP1998 普及组] 阶乘之和

David007 @ 2023-04-01 13:17:49

本代码已经调了两天了!!,请大佬们帮忙看一下,非常感谢!!

#include<iostream>
#include<cstring>
#include<string>
using namespace std;

//高静加法 
string gao_jia(string a,string b){
    string ans ="";
    int na[505],nb[505];
    memset(na,0,sizeof(na));
    memset(nb,0,sizeof(nb));
    int len1=a.size();
    int len2=b.size();
    int len=max(len1,len2);
    for(int i=0;i<len1;i++){
        na[len1-i-1]=a[i]-'0';
    }
    for(int i=0;i<len2;i++){
        nb[len2-i-1]=b[i]-'0';
    }
    for(int i=0;i<len;i++){
        na[i]+=nb[i];
        na[i+1]+=na[i]/10;
        na[i]%=10;
    }
    int i=len;
    while(i>0&&na[i]==0) i--;
    for(i;i>=0;i--){
        ans+=char(na[i]+'0');
    }
    return ans;
}
//高精乘法 
string gao_cheng_dan(string a,int b)
{
    int na[505],len;
    string ans="";
    len = a.size();
    for(int i=0;i<len;i++)
    {
        na[len-i-1] = a[i]-'0';
    }
    for(int i=0;i<len;i++)
    {
        na[i] *= b;
    }
    //统一处理进位
    for(int i=0;i<len;i++)
    {
        na[i+1] += na[i]/10;
        na[i] %= 10;
    }
    while(na[len])
    {
        na[len+1] = na[len]/10;
        na[len] %= 10;
        len++;
    }        
    for(int i=len-1;i>=0;i--)
    {
        ans += char(na[i]+'0');
    }
    return ans;
}

int p;
string u="0";
int main(){
    cin>>p;
    while(p!=0){
        string o="1";
        for(int i=1;i<=p;i++){
            o=gao_cheng_dan(o,i);
        }
        u=gao_jia(o,u);
        p--;
    }
    cout<<u;
} 

by __zhuruirong__ @ 2023-04-02 12:34:34

#include<iostream>
#include<string>
#include<vector>
using namespace std;
typedef vector<int> vi;
vi add2(vi& A,vi& B)
{
    vi C;
    if(A.size()<B.size()) return add2(B,A);
    int t=0;
    for(int i=0;i<A.size();i++)
    {
        t+=A[i];
        if(i<B.size()) t+=B[i];
        C.push_back(t%10);
        t/=10;
    }
    if(t)
        C.push_back(1);
    return C;
}
vi add(vi& A,int b)
{
    vi C;
    int t=0;
    for(int i=0;i<A.size()||t;i++)
    {
        if(i<A.size())
            t+=A[i]*b;
        C.push_back(t%10);
        t/=10;
    }
    while(C.size()>1&&C.back()==0)
        C.pop_back();
    return C;  
}
int main()
{
    int a;
    cin>>a;
    vi ans={0},p={1};
    for(int i=1;i<=a;i++)
    {
        p=add(p,i);
        ans=add2(ans,p);
    }
    for(int i=ans.size()-1;i>=0;i--)
        cout<<ans[i];
    return 0;
}

by xxc123 @ 2023-04-10 22:15:40

求关注

 #include<iostream>
using namespace std;
int a[1001],b[1001];
void add()
{
    int t=0;
    for(int i=1000;i>=1;i--)
    {
        b[i]=b[i]+a[i]+t;
        t=b[i]/10;
        b[i]%=10;
    }
}
void multiplication(int x)
{
    int t=0;
    for(int i=1000;i>=1;i--)
    {
        a[i]=a[i]*x+t;
        t=a[i]/10;
        a[i]%=10;
    }
}
void print()
{
    int flag=0;
    for(int i=1;i<=1000;i++)
    {
        if(b[i]!=0) flag=1;
        if(flag) cout<<b[i];
    }
}
int main()
{
    a[1000]=b[1000]=1;
    int n;
    cin>>n;
    for(int i=2;i<=n;i++)
    {
        multiplication(i);
        add();
    }
    print();
    return 0;
}

从末尾算,a是阶乘积,s是和


by xxc123 @ 2023-04-10 22:15:47

@David007


by David007 @ 2023-04-28 21:13:23

已经过了,谢谢大佬,已关注


by David007 @ 2023-04-28 21:13:59

@xxc123


|