为什么我算出来的结果最后一位都比标准答案多1

P1045 [NOIP2003 普及组] 麦森数

蛇皮 @ 2020-02-15 17:24:21


#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int a[1000]={2},ans[1000]={1};
void mul1()
{
    int x[1000];
    memset(x,0,sizeof(x));
    for(int i=0;i<=500;i++)
    {
        for(int j=0;j<=500;j++)
        {
            x[i+j]+=ans[i]*a[j];
        }
        for(int j=0;j<=500;j++)
        {
            if(x[j]>=10)
            {
                x[j+1]+=x[j]/10;
                x[j]%=10;
            }
        }
    }
    for(int i=0;i<500;i++)
    {
        ans[i]=x[i];
    }
 } 
 void mul2()
{
    int x[1000];
    memset(x,0,sizeof(x));
    for(int i=0;i<=500;i++)
    {
        for(int j=0;j<=500;j++)
        {
            x[i+j]+=a[i]*a[j];
        }
        for(int j=0;j<=500;j++)
        {
            if(x[j]>=10)
            {
                x[j+1]+=x[j]/10;
                x[j]%=10;
            }
        }
    }
    for(int i=0;i<500;i++)
    {
        a[i]=x[i];
    }
 } 
int main()
{
    int p;
    cin>>p;

    int weishu=p*log10(2)+1;
    cout<<weishu<<endl;
    while(p)
    {
        if(p&1) mul1();
        mul2(); 
        p>>=1; 
    }
    for(int i=500-1;i>=0;i--)
    {
        cout<<ans[i];
        if(((i)%50)==0)
        cout<<endl;
    }
}

by wyx__ @ 2020-02-15 17:26:01

@蛇皮 所以减一就好了呀


by CrTsIr400 @ 2020-02-15 17:30:15

@蛇皮 减一


by 蛇皮 @ 2020-02-15 17:45:56

所以为什么呢?


by 蛇皮 @ 2020-02-15 17:46:06

百思不得其解


by 蛇皮 @ 2020-02-15 17:46:29

@2020严誉沣 @wyx__


by critnos @ 2020-02-15 17:48:16

@蛇皮

十进制高精度数2^{P}-1的最后500位数字。


by 蛇皮 @ 2020-02-15 17:54:39

@26535 做着做着就忘记了。(哭笑不得)


by 蛇皮 @ 2020-02-15 17:54:46

谢谢各位


by ducati @ 2020-07-13 20:32:41

考古


by ducati @ 2020-07-13 20:32:53

我也因此WA了2次QWQ 我傻逼


|