私は再帰呼び出しによってKaratsuba乗算を実装しようとしています。下のコードはうまくいくはずですが、私は答えとしてゼロを取得し続けます。何かご意見は?関数はカラツバ乗算で0を返します
#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'は本当に、本当に必要ありません。 –
デバッガを試しましたか? – UnholySheep
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –