// 質問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(1、2、3 )。 試験(111、899、1010 )。 試験( - 1、2、1 )。 Test(1、-2、-1 ); 試験(3、0、3 )。 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を返します。 } };