求助

#include<bits/stdc++.h>
using namespace std;
const int Max_M=500;
int n;
int Out[Max_M];
int Power[2*Max_M];

void DFS(int n){
  int i,j;
  if (n==0) return;
  DFS(n/2);
  for (i=1;i<=500;i++)
    for (j=1;j<=500;j++)//分拆为两个数 
      if(n%2==0) Power[i+j-1]=Power[i+j-1]+Out[i]*Out[j];//偶数,分拆两个 
      else
        Power[i+j-1]=Power[i+j-1]+Out[i]*Out[j]*2;//奇数,分拆两个,再加上剩余的2 
  for(i=1;i<=500;i++){//进位 
    Out[i]=Power[i]%10;
    Power[i+1]=Power[i+1]+Power[i]/10;
  }
  memset(Power,0,sizeof(Power));
}

int main(){
  freopen("mason.in","r",stdin);freopen("mason.out","w",stdout);
  cin>>n;
  cout<<int((log(2)/log(10)*n)+1)<<endl;//对数换底,求位数 
  Out[1]=1;
  DFS(n);
  for(int i=500;i>=2;i--){
    cout<<Out[i];
    if (i%50==1) cout<<endl;
  }
  cout<<Out[1]-1<<endl;
  return 0;
}

1 条评论

  • @ 2021-07-29 21:33:25

    找到问题了,MaxM定义太小了,改成510就过了

  • 1

信息

ID
1223
难度
5
分类
数论 | 数位统计 点击显示
标签
递交数
4067
已通过
1445
通过率
36%
被复制
19
上传者