검지 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;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.