-3

負と正の両方を処理できる加算を使用して、2 つの整数の積を求める関数を作成したいと考えています。

これは私がこれまでに持っているコードです...結果としてクレイジーな数字が得られます..私は初心者です..ありがとう

double multi(double n1, n2)
{

  double answer(0), i=0;

  do
  {
    answer += n1; i++;
  } while (i < n2);

  return answer;
}
4

1 に答える 1

2

double の代わりに整数を使用して開始し、実際に両方をパラメーターとして渡すことができます....

int multi( int x, int y )
{
    int answer = 0;

    // stuff goes here...

    return answer;
}

これは宿題だと思うので、コードを逐語的に説明するつもりはありません...

ただし、1 つの値が負の場合、同じ値が正の場合、結果は答えに対して否定されることを考慮してください。事実上、足し算xを何回も行う場合はy、両方の符号を反転させxyifyが負になるようにすることができます。それは答えを否定し、yループオーバーする肯定を与えます。

最適化は、2 つの値のどちらが大きいかを確認し、小さい方をループ変数として使用することです。


..はい、これはうーん..しかし、申し訳ありませんが、私はあなたが意味することを理解していません..

2 つの整数XとがあるとしYます。が正の場合Y、簡単に確認できます。

X * Y = (X + X + X + X + ...)

Yでは、が負の場合はどうでしょうか。私は-Yそれを示すために使用するつもりです:

X * -Y = -(X * Y)
       = -(X + X + X + X + ...)
       = (-X - X - X - X - ...)
       = ((-X) + (-X) + (-X) + (-X) + ...)

したがって、 が正の場合、のコピーをY一緒に追加します。が負の場合、 のコピーを一緒に追加します。YXY-Y-X

それでも解決しない場合は、しばらく座って考えてみることをお勧めします。

于 2012-10-25T23:22:22.670 に答える