「ソードフィンガーオファー」の質問65:加算、減算、乗算、除算なしの加算

// 質問65のインタビュー:加算、減算、乗算、および除算のない加算
 // トピック:2つの整数の合計を求める関数を記述します。+、-、×、÷ // 4つの算術記号
を関数本体で使用しないでください
 
#include <cstdio> int Add(int num1、int num2)
{ int sum = 0 ; // and int carry = 0 ; // Carry do 
    { 
        sum =(num1 ^ num2); // ビットXOR合計、なしキャリー 
        キャリー=(num1&num2)<< 1 ; //キャリーが生成される位置は、左に1シフトされます        
        num1 = sum; 
        num2 = carry;


    
    

    


    } while(num2!= 0); //問題は、合計とキャリーキャリーの合計問題に変換され、

    num1 返します; 
}
// ====================测试代码==================== 
void Test(int num1、int num2、intが期待されます)
{ 
    int result = Add(num1、num2);
    if(result == expected)
        printf(" %d +%d is%d。Passed \ n " 、num1、num2、result);
    else 
        printf(" %d +%d is%d。FAILED \ n " 、num1、num2、result); 
} 

int main(int argc、char * argv [])
{ 
    Test(123 )。
    試験(1118991010 )。

    試験( - 121 )。
    Test(1-2-1 ); 

    試験(303 )。
    Test(0-4-4 ); 

    試験( - 2、 - 8、 - 10 ); 

    0を返し ます
}
テストコード

分析:分析プロセスは重要です。

クラスSolution {
 public int Add(int num1、int num2)
    { 
        int sum = 0 ;
        intキャリー= 0 ; 
        
        do 
        { 
            sum =(num1 ^ num2); 
            キャリー =(num1&num2)<< 1 ; 
            
            num1 = 合計; 
            num2 = キャリー; 
        } while(num2!= 0 ); 
        
        num1を返します。
    } 
};
Niuke提出コード

 

おすすめ

転載: www.cnblogs.com/ZSY-blog/p/12694679.html