5

乗算(*)記号を使用せずに10進数を乗算する方法を誰かに提案できますか? 宿題のように見えますが、これを達成する方法を知りたいだけです。以下のように、正と負の整数に対してすでにこれを行っています。

int first = 2;
int second =2;
int result = 0;
bool isNegative = false;

if (first < 0)
{
    first = Math.Abs(first);
    isNegative = true;
}
if (second < 0)
{
    second = Math.Abs(second);
    isNegative = true;
}

for (int i = 1; i <= second; i++)
{
    result += first;
}

if (isNegative)
    result = -Math.Abs(result);

これを小数に掛けたい:

decimal third = 1.1;
decimal fourth = 1.2;

ありがとう

4

5 に答える 5

12

少しチートですが、タスクが (演算子だけでなく*) すべての形式の乗算に厳密に関連している場合は、逆数で割ります。

var result = first / (1 / (decimal)second);
于 2013-10-01T13:26:18.257 に答える
6

ちょうど別の方法;)

if (second < 0)
{ 
    second = Math.Abs(second);
    first = (-1) * first;
}
result = Enumerable.Repeat(first, second).Sum();
于 2013-10-01T13:26:42.840 に答える
2

* 演算子を使用せずに 2 つの小数を乗算する最も簡単な方法は、Decimal.Multiply メソッドを使用することです。

例:

decimal first = -2.234M;
decimal second = 3.14M;

decimal product = Decimal.Multiply(first, second);
于 2013-10-01T13:34:43.353 に答える
0

完全を期すために、ログのルールを使用した別のアプローチを次に示します。

decimal result = (decimal)Math.Exp(
    Math.Log((double)third) + Math.Log((double)fourth));

すべての小数で機能するわけではありません (特に負の数では機能しませんが、これらを検出して回避するように拡張することはできます) が、それでも興味深いものです。

于 2013-10-01T21:52:34.213 に答える