은 사실 다음입니다정수 나누기를 다룰 때 비슷한 용어를 수집하는 방법이 있습니까? 정수 나누기 작동하지 예를 들어
x/4 + x/2 = x*(1/4+1/2) = x * 3/4
정수 나누기를 다루는이 양식에 x/4 + x/2
을 줄일 수있는 방법이있다 : x * (int1/int2)
은? 그렇다면 어떻게?
은 사실 다음입니다정수 나누기를 다룰 때 비슷한 용어를 수집하는 방법이 있습니까? 정수 나누기 작동하지 예를 들어
x/4 + x/2 = x*(1/4+1/2) = x * 3/4
정수 나누기를 다루는이 양식에 x/4 + x/2
을 줄일 수있는 방법이있다 : x * (int1/int2)
은? 그렇다면 어떻게?
나는 이렇게 할 수 없을 것이라고 생각합니다. 예를 들어 취하십시오
5 \ 3 + 5 \ 2 = 1 + 2 = 3
여기서 \
은 정수 나눗셈을 나타냅니다. 우리가 /
에 대한 \
을 대체, 위의 예에이 규칙을 적용하려고한다면
지금 일반 부문
a/b + a/c = a(b + c)/bc
와 같은 표현을보고, 우리는이를 얻을 것 :
5 \ 3 + 5 \ 2 = 5(3 + 2) \ (2 * 3) = 25 \ 6 = 4 [wrong answer!]
^^^
This must be wrong
나는 거기에 이 없다는 주장을하지 않으려 고하고있다. 은이다.
'5 \ 2 = 1' - 확실합니까? – greybeard
질문 reduce x/4 + x/2 into this form: x * (int1/int2)
은 원하는 검색어가 아닌 것처럼 보입니다. (int1/int2)
나누기를 처음으로 간단하게 수행하면 int3
이됩니다.
그래서 다른 언급으로의이
reduce x/4 + x/2 into this form: (x * int1)/int2
와 함께 작업 할 그 불가능에 힌트가이 문제가있다. 그래서 나는 여전히 x
에 하나의 액세스이며 분기가 없다는 점에서 당신을 위해 또 다른 형태를 제안 할 것입니다.
reduce x/4 + x/2 into this form: ((x/int1)*int2)/int3
x/4 + x/2
는 ((x/2)*3)/2
을 줄일 수 있습니다. 4
은 2
의 배수 여야합니다.
참고 : |x|
이 INTMAX/3*2
으로 시작하는 경우 오버플로가 발생할 수 있습니다.
테스트 코드
int test2(int x) {
int y1 = x/4 + x/2;
int y2 = ((x/2)*3)/2;
printf("%3d %3d %3d %d\n", x, y1, y2, y1==y2);
return y1==y2;
}
이 오프 주제입니다; http://math.stackexchange.com에서 시도하십시오. –
하지만 대답은 '아니오'입니다. x = 4이면 결과는 3입니다. 단일 정수 곱셈 또는 나눗셈의 결과로 얻을 수없는 결과입니다. –
'(x * 3)/4'는 올바른 결과를 얻고 단 하나의 부분만을 수행하지만 정확히 묻는 형식은 아닙니다. –