劍指offer第四十七題:不能用加減乘除作加法ios
1 //============================================================================ 2 // Name : JZ-C-47.cpp 3 // Author : Laughing_Lz 4 // Version : 5 // Copyright : All Right Reserved 6 // Description : 不能用加減乘除作加法 7 //============================================================================ 8 9 #include <iostream> 10 #include <stdio.h> 11 using namespace std; 12 13 int Add(int num1, int num2) { 14 int sum, carry; 15 do { 16 sum = num1 ^ num2; //第一步:異或(各(★)位相加,先不考慮進位) 17 carry = (num1 & num2) << 1; //第二步:先與運算再左移獲得進位 18 19 num1 = sum; 20 num2 = carry; 21 } while (num2 != 0); //第三步:前兩個步驟的結果相加(重複前面兩步,直到不產生進位爲止) 22 23 return num1; 24 } 25 26 // ====================測試代碼==================== 27 void Test(int num1, int num2, int expected) { 28 int result = Add(num1, num2); 29 if (result == expected) 30 printf("%d + %d is %d. Passed\n", num1, num2, result); 31 else 32 printf("%d + %d is %d. Failed\n", num1, num2, result); 33 } 34 35 int main(int argc, char** argv) { 36 Test(1, 2, 3); 37 Test(111, 899, 1010); 38 Test(-1, 2, 1); 39 Test(1, -2, -1); 40 Test(3, 0, 3); 41 Test(0, -4, -4); 42 Test(-2, -8, -10); 43 }