【发布时间】:2016-10-23 17:48:28
【问题描述】:
我正在尝试通过递归调用来实现 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;
}
}
【问题讨论】:
-
#define真的,真的没必要。 -
你试过使用调试器吗?
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
您是否愿意(启发性/有见地)评论该代码?
-
谢谢大家。我会记住这一点
标签: c++ algorithm oop karatsuba