검지 offer (45) - 가감 승제 없 이 덧셈

1513 단어 알고리즘
제목 설명
함수 하 나 를 쓰 고 두 정수 의 합 을 구하 고 함수 내 에서 +, -, *, / 사 칙 연산 기 호 를 사용 하지 못 하도록 요구한다.
문제 풀이 의 사고 방향.
먼저 10 진법 이 어떻게 하 는 지 보 겠 습 니 다. 5 + 7 = 12, 3 단계 첫 번 째 단계: 여러분 의 값 을 더 하면 진 위 를 계산 하지 않 고 2 두 번 째 단 계 를 얻 을 수 있 습 니 다. 진 위 를 계산 하고 10 을 얻 을 수 있 습 니 다. 만약 에 이 단계 의 진 위 를 0 으로 하면 첫 번 째 단계 에서 얻 은 값 이 최종 결과 입 니 다.세 번 째 단계: 상기 두 단 계 를 반복 하고 더 한 값 만 상기 두 단계 에서 얻 은 결과 2 와 10 으로 12 를 얻는다.
마찬가지 로 우 리 는 3 단계 로 2 진 값 을 계산 할 수 있 습 니 다. 5 - 101, 7 - 111 첫 번 째 단계: 여러분 의 값 을 더 하면 진 위 를 계산 하지 않 고 010 을 얻 을 수 있 습 니 다. 2 진 각 자 를 더 하면 여러분 이 이 또는 조작 을 하 는 것 과 같 습 니 다. 101 ^ 111.
두 번 째 단계: 진 위 를 계산 하여 1010 을 얻 으 면 여러분 이 하 는 것 과 조작 이 101 을 얻 는 것 과 같 습 니 다. 다시 왼쪽으로 한 자 리 를 옮 기 면 1010 을 얻 을 수 있 습 니 다. (101 & 111) < 1.
세 번 째 단 계 는 상기 두 단 계 를 반복 합 니 다. 여러분 은 010 ^ 1010 = 1000 을 더 하고 진 위 는 100 = (010 & 1010) < 1 입 니 다.상기 두 단 계 를 계속 반복 합 니 다: 1000 ^ 100 = 1100, 진 위 는 0 이 고 순환 에서 벗 어 나 1100 이 최종 결과 입 니 다.
코드
class Solution {
public:
    int Add(int num1, int num2)
    {
        while(num2!=0) {
        int temp = num1 ^ num2;
        num2 = (num1 & num2) << 1;
        num1 = temp;
    }
        return num1;
    }
};

좋은 웹페이지 즐겨찾기