1. 程式人生 > >不用加減乘除做加法:1.異或 2.sizeof

不用加減乘除做加法:1.異或 2.sizeof

題目描述

寫一個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算子號。

1.利用sizeof(),但是注意,對於非陣列型別,sizeof()返回的是函式指標的值。

2.利用異或運算,但是注意,進位要考慮,還有,負數的情況,相減的情況都要考率。

class Solution {
public:
    int Add(int num1, int num2)
    {
        int a[num1]; //但是不能寫成int *a=new int[num1],這個sizeof(a)不是陣列的大小,而是指標的大小4.
        int b[num2];
        return (sizeof(a)+sizeof(b))/sizeof(int);
    }
};

class Solution {
public:
    int Add(int num1, int num2)
    {
        do
        {
            int sum=num1^num2;
            int carry=(num1&num2)<<1;

            num1=sum;
            num2=carry;

        }while(num2!=0);//這個法則對負數也有用,所以不能寫while(num2>0)
        return num1;
    }
};