2017-12-25 1 views
-3

+, -, *, /, % 및^수있는 C++ 계산기를 만들어야합니다. 내 코드에는 +, -, *,/및 %를 사용할 수 없습니다.연산자가없는 C++ 계산기

#include<iostream> 
using namespace std; 
typedef long long ll; 
ll add(ll a,ll b){ 
    if(b==0)return a; 
    else return add(a^b,(a&b)<<1); 
} 
ll sub(ll a,ll b){ 
    if(b==0)return a; 
    else return sub(a^b,((~a)&b)<<1); 
} 

다음은 내가 가지고있는 것입니다. 곱셈과 나눗셈 부분을 어떻게 코딩해야할지 모르겠습니다. 어떤 도움이 필요합니까?

+0

은 숙제처럼 보입니다. 질문 규칙을 검토하고 일반적인 문제에 대한 도움을 요청하는 대신 특정 문제를 묻는 것이 좋습니다. –

+0

간단한 Google 검색으로 이와 같은 많은 질문이 발생합니다. https://stackoverflow.com/questions/5284898/implement-division-with-bit-wise-operator – pepperjack

+0

'll'과 같은 매크로는 사용하지 마십시오. – PaulMcKenzie

답변

0
ll mul(ll a,ll b){ 
    if(b<0){ 
     b=add(~b,1); 
     a=add(~a,1); 
    } 
    ll res=0; 
    while(b>0){ 
     if(b&1)res=add(res,a); 
     a<<=1; 
     b>>=1; 
    } 
    return res; 
} 
ll div(ll a,ll b){ 
    ll c=0,op=0; 
    if(a<0){ 
     a=add(~a,1); 
     op^=1; 
    } 
    if(b<0){ 
     b=add(~b,1); 
     op^=1; 
    } 
    if(b!=0){ 
     while(a>=b){ 
      a=sub(a,b); 
      c=add(c,1); 
     } 
    } 
    if(op)c=add(~c,1); 
    return c; 
} 

이 솔루션이 도움이되기를 바랍니다. 여기서 더하기 비트 연산자 (&, |, ^, ~, < <, >>)를 사용하여 곱하기 및 나눗셈을 수행하기 위해 더하기와 빼기를 사용합니다. 당신은 cplusplus.com을 참조하여 그들에 대해 더 많은 것을 읽을 수 있습니다. 그래서이 경우에 곱셈을 볼 수 있습니다. 왼쪽으로 비트를 이동하기 때문에 일자리를 10 자리로 옮기는 것과 같습니다. 자세한 설명이 필요하면 자유롭게 도움을 요청하십시오. :)

+0

흠 좋습니다. 감사합니다. –

+0

숙제와 숙제가없는 질문에 어떻게 대답하는지 약간의주의를 기울이십시오. 숙제 대답은 코드에 가벼워 야하고 설명에 무거워 야합니다. 간단히 코드 공을 넘겨 주면 모든 질문자가 잘라 내기 및 붙여 넣기에서 약간의 기술 향상을 얻을 수 있기 때문입니다. 최종 결과는 종종 [Cargo Cult Programming] (https://en.wikipedia.org/wiki/Cargo_cult_programming)이며 아무도 그 혜택을받지 못합니다. [Cthulhu를 제외하고] (https://en.wikipedia.org/wiki/Cthulhu). – user4581301

+0

좋아, 내가 더 많은 설명을 추가하려면 내 게시물을 편집합니다 – QuIcKmAtHs