。安全オファー-48を証明するために、加算と減算、乗算、除算(C ++ / Javaの)しないでください

トピック:

書き込み機能、および2つの整数の和、機能がインビボで使用されなくてもよい+が必要、 - 、*、/四則記号。

分析:

さらには、別々に計算される計算の最も原始的な方法に還元及び非キャリー及びキャリー、最後の二つの部分一緒に、およびです。私たちは、<<を使用して求めるアンドキャリー、^とないキャリーを求めることができます。

次いで、XORを使用し、5は、例えば、バイナリ101,9 + 9,5は、バイナリ1001、すなわち= 1 5&9、2つの数値を運ぶためにシークした後、左の、2(0010)は、キャリーであります持ち運びや、^ 101 = 1100 1001、その後、キャリーが0である&^まで使用しないで求めています。

手順:

C ++

クラスのソリューション{
 パブリックint型の追加(int型 NUM1、int型NUM2)
    {
        もし(NUM1 == 0 リターンからnum2;
        もし(num2の== 0 の戻りNUM1。
        int型キャリー= 1 ;
        一方、(NUM2!= 0 ){
            キャリー =(NUM1&NUM2)<< 1 
            NUM1 = NUM1 ^ num2の。
            NUM2 = キャリー。
        }
        リターンNUM1。
    }
}。

ジャワ

パブリック クラスソリューション{
     公共の int型の追加(int型 NUM1、int型からnum2){
         場合(NUM1 == 0 リターンからnum2;
        もし(num2の== 0 の戻りNUM1。
        int型のキャリー。
        一方、(NUM2!= 0 ){
            キャリー =(NUM1&NUM2)<< 1 
            NUM1 = NUM1 ^ num2の。
            NUM2 = キャリー。
        }
        リターンNUM1。
    }
}

おすすめ

転載: www.cnblogs.com/silentteller/p/12083489.html