为什么子函数里面清空数组无效?是我哪写错了吗

P1045 [NOIP2003 普及组] 麦森数

yinhan @ 2020-02-14 17:57:46

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int num[1001];
int ans[1001];
int base[1001];
int re[1001];
void multiply(int* a,int* b,int* c)
{
   memset(c,0,sizeof(c)); //为什么仅有子函数里面的赋值无效
   for(int i=1;i<=500;i++)
   {
     for(int j=1;j<=500;j++)
     {
       c[i+j-1]+=a[i]*b[j];
     }
   }
   for(int i=1;i<=500;i++)
   {
     c[i+1]+=c[i]/10;
     c[i]%=10;
   }
}
void fastpower(int b,int p)
{
  while(p!=0)
  {
    if(p & 1==1)
    {
      memset(num,0,sizeof(num));  
       multiply(ans,base,num);
      memcpy(ans,num,sizeof(ans));
    }
    p=p>>1;
    memset(re,0,sizeof(re));
    multiply(base,base,re);
    memcpy(base,re,sizeof(base));
  }
}
int main()
{
  int p;
  cin>>p;
  ans[1]=1;
  base[1]=2;
  fastpower(2,p);
  printf("%d\n",(int)(log10(2)*p+1));
  ans[1]--;
  for(int i=500;i>=1;i--)
  {
    if(i!=500 && i%50==0) printf("\n");
    printf("%d",ans[i]);
  }
return 0;
}

emm就是一开始我觉得子函数里面清空数组后应该就行了,但是答案是错的,比如p为10的时候快速幂某一步16*16算出为266,是因为子函数里面c只清空了c[1]=6,但是c[2]为1并没有清空。。。。求解


by yinhan @ 2020-02-14 18:47:20

@ouuan 谢谢,我大概明白了


by yinhan @ 2020-02-14 18:47:38

@function_of_zero 谢谢啦


上一页 |