leetcode 029 Divide Two Integers
3380 단어 LeetCode
제목
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
생각:
위치 이동 조작부호를 이용하여 해답을 구하지만, 위치 이동 연산에 대해서는 나는 결코 잘하지 못한다.그래서 나는 C#의 해를 참고하여 귀속으로 풀었다.귀속하기 전에 데이터를 처리해야 한다. 1.제수가 1인 경우 피제수로 바로 돌아갑니다.2. 제수가 -1일 때 두 가지 상황이 있다. (1) 제수가
Integer.MIN_VALUE
일 경우 Integer.MIN_VALUE
제-1이 넘치기 때문에 Integer.MAX_VALUE
(2)제수의 반대수를 되돌려준다.반환 값의 양과 음의 번호를 기록하려면, 피제수는 제수 기호와 반대로 음이고 그렇지 않으면 양이다.4. 피제수와 제수를 모두 음수로 한다. 계산이 편리하기 때문에 상기 두 번째 점을 배제한 후 음수 연산이 넘치지 않는다.5. 귀속을 시작한다.PS: 0의 경우를 제외하고는 고려할 필요가 없습니다. 용례에 이런 상황은 없습니다.반복 프로세스:
코드:
public int divide(int dividend, int divisor)
{
if(divisor == 1) return dividend;// 1 。。。
if(divisor == -1) return dividend == Integer.MIN_VALUE ? Integer.MAX_VALUE : -dividend;// -1 。。。
boolean sign = (dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0);//
dividend = dividend > 0 ? -dividend : dividend;//
divisor = divisor > 0 ? -divisor : divisor;//
int res = div(dividend, divisor);//
return sign ? res : -res;
}
private int div(int dividend, int divisor)
{
if(dividend > divisor) return 0;
if(dividend == divisor) return -1;
int res = -1, tmp = divisor;
while(dividend - tmp <= tmp)
{
tmp <<= 1;// tmp*=2;
res <<= 1;// res*=2;
}
return div(dividend - tmp, divisor) + res;
}
결과 세부 사항 (그림):
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.