80分救命

P1045 [NOIP2003 普及组] 麦森数

aa9527 @ 2022-07-09 20:00:15

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    long long P;
    cin>>P;
    int length=8;
    int m[502]={0};
    m[1]=1;
    int n=1048576;      //2的20次方 
    int k=n;
    for(int i=1;n!=0;i++)
    {
        m[i]=n%10;
        n=n/10;
    }
    for(int i=1;i<=P/20-1;i++)      //先算20的整数倍次方,比如2的1279次方就先算前1260次方,剩下的19次方等下算 
    {
        for(int j=1;j<=(i+1)*20*log10(2)+1 && j<=501;j++)
        {
            m[j]=m[j]*k;
            if(m[j-1]>=10)
            {
                m[j]+=m[j-1]/10;
                m[j-1]=m[j-1]%10;
            }
        }
    }
    for(int i=1;i<=P%20;i++)        //上面得到的结果在这里算剩下的19次方 
    {
        for(int j=1;j<=(P/20*20+i)*log10(2)+1 && j<=501;j++)
        {
            m[j]=m[j]*2;
            if(m[j-1]>=10)
            {
                m[j]+=m[j-1]/10;
                m[j-1]=m[j-1]%10;
            }
        }
    }
    length=P*log10(2)+1;
    cout<<length<<endl;
    m[1]=m[1]-1;
    for(int i=500;i>=1;i--)
    {
        cout<<m[i];
        if((i-1)%50==0)
            cout<<endl;
    }
 } 

by F_oR_es_T @ 2022-10-29 12:37:34

@aa9527

你开一下O2就行了我看了半天也没发现错误,就试了一下另外再加个return 0;加不加都行好像


|