2017-12-25 19 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を参照して詳細を読むこともできます。ですから、この場合は乗算で見ることができますが、ビットを左にシフトするので、1位を10位に移動するようなものです。詳細を知りたい場合は、自由に助けを求めてください。 :)

+0

よろしくお願いします。 –

+0

宿題や宿題に敏感な質問にどのように気を付けるかを少し気を付けてください。宿題の解答はコードの上に軽くなければならず、解説に重くなければならない。なぜなら、単にコードのボールを手渡すだけで、すべての質問者がそれを得る可能性が高いからである。最終的な結果はしばしば[Cargo Cult Programming](https://en.wikipedia.org/wiki/Cargo_cult_programming)であり、誰もその利益を得ていません。 [Cthulhuを除いて](https://en.wikipedia.org/wiki/Cthulhu)。 – user4581301

+0

私の投稿を編集して詳しい説明を追加します – QuIcKmAtHs