函数在karatsuba乘法中返回0

时间:2016-10-23 17:48:29

标签: c++ algorithm oop karatsuba

我试图通过递归调用实现Karatsuba乘法。下面的代码应该可以工作,但我一直得到零作为答案。有什么想法吗?

#define ll long long int 
ll  kmul(ll p, ll q)
{
   ll a,b,c,d,ans;
   ll n=0;
   while(p)
   {
      p=p/10;
      n++;
   }
   //cout<<n<<endl;
  if(n<2)
  {
      return p*q;
  }
  else
  {
     int k=n/2;
     ll j=pow(10,k);
     a=p/j;
     b=p%j;
     c=q/(j);
     b=q%j;
     ans=(pow(10,n)*(kmul(a,c)))+(j*kmul(a,d)*kmul(b,c))+kmul(b,d);
     return ans;
  }
 } 

2 个答案:

答案 0 :(得分:1)

此循环后:

while(p)
{
  p=p/10;
  n++;
}

p的值为零。您的递归在

处停止
if(n<2)
{
  return p*q;
}

因此,无论输入是什么,结果都会得到零。

答案 1 :(得分:0)

您可能希望使用p的副本来计算n循环中的while。这样你就可以保留p的值。像这样:

ll pd = p;
while(pd)
{
  pd=pd/10;
  n++;
}