私のコードは以下のとおりで、ほとんどの入力で機能しますが、非常に大きな数(特定の例では2147483647を2で割った値)の場合、セグメンテーション違反が発生し、プログラムが機能しなくなります。badd()関数とbsub()関数は、それぞれ整数を加算または減算するだけであることに注意してください。
unsigned int bdiv(unsigned int dividend, unsigned int divisor){
int quotient = 1;
if (divisor == dividend)
{
return 1;
}
else if (dividend < divisor)
{ return -1; }// this represents dividing by zero
quotient = badd(quotient, bdiv(bsub(dividend, divisor), divisor));
return quotient;
}
また、bmult()関数にも少し問題があります。一部の値では機能しますが、-8192x3などの値ではプログラムが失敗します。この関数もリストされています。助けてくれてありがとう。ほんとうにありがとう!
int bmult(int x,int y){
int total=0;
/*for (i = 31; i >= 0; i--)
{
total = total << 1;
if(y&1 ==1)
total = badd(total,x);
}
return total;*/
while (x != 0)
{
if ((x&1) != 0)
{
total = badd(total, y);
}
y <<= 1;
x >>= 1;
}
return total;
}