0

*or/演算子なしで乗算関数を作成する必要があります。私はすでにこのような方法を作っています。

for(int i=0; i < number1; i++){
    result += number2;
}

System.Out.println(result);

さて、ここに私の問題があります。私の講師がトピックを変更するまでは問題ありませんでしたが、乗算方法は10進数を乗算できる必要があります。+演算子だけで小数値を処理できる乗算方法を作成する方法がわかりませんでした-

4

4 に答える 4

1

ええ、乗算にlogを使用できます。

ログ(a*b)=ログ(a)+ログ(b)

log(a)+log(b)の指数値を求めます

そして、記号を変換できます..

例えば:

-9*8=-72

ログ(9*8)=ログ(9)+ログ(8)=2.19+2.07=4.27

e^4.27=72

現在、-ve no は 1 つだけです。それなら-72

それ以外は72

私は次の関数を書いています:

void multiply(int num1,int num2)  
{
int counter=0;  
if(num1<0)  
{counter++;num1+=num1+num1;}  
if(num2<0)  
{counter++;num2+=num2+num2;}    
double res=Math.log(num1)+Math.log(num2);  
int result=(int)Math.exp(res);
if(counter%2==0)
System.out.println("the result is:"+result);
else
System.out.println("the result is:-"+result);  
}  

これがあなたを助けることを願っています....

于 2013-09-15T13:00:27.403 に答える
1

10 進数を取り、int が残るまで小数点を少しずつ移動します: 0.041 -> 1. step 0.41 -> 2. step 4.1 -> 3. step 41

0.041 * 3 を掛けるには、上記の手順を 3 回実行し、41 * 3 = 123 を掛けます。結果を得るには、123 を取り、手順を元に戻します: 1. 12.3、2. 1.23、3. 0.123. 結果は 0.123 = 0.041 * 3 です。

編集:各数値の小数点以下の桁数を決定するには、次の質問で答えを見つけることができます: How many decimal Places in A Double (Java)

回答は、これを非常に簡単に解決する他の2つの方法を示しています。数値を文字列に入れ、この文字列のどこに「.」-DecimalPointが発生するかを確認するか、小数点以下の桁数を返すメソッドを持つBigDecimalタイプを使用します.

于 2013-09-15T13:04:14.713 に答える
0

完全なコードを期待するべきではありませんが、これを実現するためのヒントを次に示します。ループのrecursion代わりにテクニックを使用してみてください。for

public double multiplyMe(double x, double y)
{
   if(y == 0 || x == 0)
     return 0;

   if(y > 0 && x > 0 )
     return (x + multiplyMe(x, y-1)); // multiply positive

   if(y < 0 || x < 0 )
     return - multiplyMe(x, -y); // multiply negative
}

ログを使用したもう 1 つの方法:

10 累乗 ( log10(x) と log10(y) の合計)

于 2013-09-15T13:09:30.010 に答える