알고리즘 code - 01

1066 단어
A+B Problem
제목: 비트 연산 을 사용 하여 a 와 b 의 합, 두 개의 정수 a 와 b 를 구하 고 그 중에서 0 < = a, b < = 100 을 구하 십시오.
분석: a + b = a ^ b + (a & b) < 1
그 중에서 a ^ b 는 이 또는 연산 으로 본질 적 으로 불 진 덧셈 으로 볼 수 있 습 니 다.뒤의 a & b 는 연산 과 같은 위치 에서 모두 1 이면 결과 가 1 이 고 다른 상황 은 결과 가 0 이다. 우 리 는 연산 과 한 자 리 를 왼쪽으로 옮 기 면 진 위 연산 으로 볼 수 있다.그래서 이들 의 결합 은 완 성 된 덧셈 연산 이다.
문제 에서 비트 연산 으로 만 화 해 를 요구 하기 때문에 a + b 와 (a & b) < 1 도 두 수 를 더 하고 a + 0 = a 이기 때문에 우 리 는 상기 사고방식 의 마지막 '양자 결합' 을 재 귀 또는 순환 방식 으로 완성 할 수 있다.b = 0 으로 돌아 가 거나 순환 할 때 까지 return a;됐다.
코드:
//    
public class Solution01 {
    public int sum(int a,int b){
        if (b == 0){
            return a;
        }
        int sum = a ^ b;
        int carry = (a & b) << 1;
        return sum(sum,carry);
    }
}
//    
public class Solution02 {
    int sum(int a,int b){
        int sum = 0,carry = 0;
        while (b!=0){
            sum = a^b;
            carry = (a&b)<<1;
            a = sum;
            b = carry;
        }
        return a;
    }
}

좋은 웹페이지 즐겨찾기