《每日一題》不用加減乘除做加法

題目描述

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

代碼

//方法一,按位比較,一步一步計算 
class Solution {
public:
    int Add(int num1, int num2)
    {
    int ret=0;
    int flag=0;//進位標誌
    for(int i=0;i<32;i++)
    {
        if((num1&(0x01<<i))^(num2&(0x01<<i)))
        {
            if(flag==1)
            {
                  flag=1;//產生進位信號
            }
            else
            ret=ret|(0x01<<i);
        }
        else
        {
            if(flag==1)
            {
                ret=ret|(0x01<<i);
                flag=0;//進位完成
            }
            if((num1&(0x01<<i)))//兩個都爲1
            {
                flag=1;
            }



        }


    }
          return ret;  
    }

};

//法二 把進位和不進位的值分開,然後不斷迭代,直到沒有進位,說明加法結束

class Solution {
public:
    int Add(int num1, int num2)
    {
    int sum;//和
    int carry;//進位
     do
     {
         sum=num1^num2;
         carry=(num1&num2)<<1;//得到進位值
         num1=sum;
         num2=carry;
     }
     while(num2!=0);//無進位了就停止相加
        return sum;
    }


}; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章