설명 제목 : 두 개의 바이너리 문자열을 감안할 때, 그리고 복귀 그들의 (이진수로 표현). 그리고 비어 있지 않은 입력 문자열은 숫자 만 포함 1
하고 0
.
A는 생각 : 사용 내장 된 기능 파이썬
1 급 해결책 : 2 DEF -> addBinary (: STR, B STR 자기, a) STR : 3 창 ' {0 : B} ' .format (INT (a, 2) + INT (b, 2)) #의 INT ( X , 베이스 = 10 )
참조의 사용 형식의 일부에 대해 https://www.cnblogs.com/benric/p/4965224.html
생각이 : 캐리 여부를 나타내는 설정 플래그.
. 1 급 해결책 : 2 DEF addBinary (자기, A : STR, B : STR) -> STR : . (3) 에서 플래그 = 0 . 4 N- = 최대 (렌 (A), 렌 (B)) . 5 A, B = a.zfill ( N-) b.zfill (N-) # zfill 좌측 단부 N- 캐릭터까지 제로 패딩된다에서 6. ANS = ' 7. 위한 I 의 범위 (1 렌 (A). +1 ) . 8 IF A [-i ] == ' . 1 ' : . 9 .에서 플래그 = 1 + 10 IF B [-i] == ' 1. ' : . 11 .에 플래그 + 1 = 12 인 IF 에서 플래그 == 2 % 1 :. # 플래그는 캐리 디지트를 나타내는 13 ANS = + ' 1. ' 14 다른 : 15 ANS + = ' 0 ' (16) 에서 플래그 // = 2 (17). IF 에서 플래그 == 1. : 18은 ANS + = ' 1. ' 19. 리턴 ANS [-1 : -. 1] # 역방향 출력
세 아이디어 없음 가산 연산은 비트에서 계산되지 않는다.
도시 된 바와 같이, 반송되지는 가산기 (단, A의 값과 B를 동시에 1 없을 때) 단일 XOR 연산에 대응하는 비트
도시 된 바와 같이, 상기 반송은 계산에 의해 발생. 즉, 녹색 상자 청색 박스에 의해 생성 된 캐리를 추가하기 전에 해당 비트에 추가 한 예에 대해서는
캐리가 생성되지 원경까지 루프는 생성 된 결과를 추가 가산기에 전달하지 않을 것이다 (즉, 반송시 = 0)
. 1 급 해결책 : 2 DEF addBinary (자기, A : STR, B : STR) -> STR : . (3) X, Y = INT (A, 2), INT (B, 2 ) 4. 그동안 Y : 5. ANS = X ^ Y # XOR 연산 6. 캐리 = (X 및 Y)와 1 <<. #의 위상 및 좌측 7. X, Y = 캐리와 ANS, 8. 반환 함 (X)에 [2] # 이진 출력 0bxxxx 때문에