2013-06-08 4 views
0

은 사실 다음입니다정수 나누기를 다룰 때 비슷한 용어를 수집하는 방법이 있습니까? 정수 나누기 작동하지 예를 들어

x/4 + x/2 = x*(1/4+1/2) = x * 3/4 

정수 나누기를 다루는이 양식에 x/4 + x/2을 줄일 수있는 방법이있다 : x * (int1/int2)은? 그렇다면 어떻게?

+0

이 오프 주제입니다; http://math.stackexchange.com에서 시도하십시오. –

+0

하지만 대답은 '아니오'입니다. x = 4이면 결과는 3입니다. 단일 정수 곱셈 또는 나눗셈의 결과로 얻을 수없는 결과입니다. –

+2

'(x * 3)/4'는 올바른 결과를 얻고 단 하나의 부분만을 수행하지만 정확히 묻는 형식은 아닙니다. –

답변

0

나는 이렇게 할 수 없을 것이라고 생각합니다. 예를 들어 취하십시오

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 

나는 거기에 이 없다는 주장을하지 않으려 고하고있다. 은이다.

+0

'5 \ 2 = 1' - 확실합니까? – greybeard

0

질문 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을 줄일 수 있습니다. 42의 배수 여야합니다.

참고 : |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; 
    }