8

私は 9 年生です。数学の先生から、+サインイン C プログラムを使用せずに数字を追加するように言われました。

試してみ a - (-b) = a + b;ましたが、数学の先生は他の選択肢を求めています。

4

5 に答える 5

23

あなたのCプログラムでこの関数を使用してください

int Add(int a, int b)
{
    while (b)
    {
        // carry now contains common set bits of "a" and "b"
        int carry = a & b;

        // Sum of bits of "a" and "b" where at least one of the bits is not set
        a = a ^ b;

        // Carry is shifted by one so that adding it to "a" gives the required sum
        b = carry << 1;
    }
    return a;
}
于 2013-09-25T17:02:45.017 に答える
12

ビットごとの AND演算子と再​​帰^を使用する&

int add(int x, int y){
    return y == 0 ? x : add( x ^ y, (x & y) << 1);
}

PS: これは vikas によって提案されたアルゴリズムの再帰バージョンです。

于 2013-09-25T17:04:44.227 に答える
8

再帰を使用するJavaで-

public static int add(int a, int b){

    if(b == 0) return a;
    int sum = a ^ b;
    int carry = (a & b) << 1;

    return add(sum, carry);

}

C-で

int add(int a, int b){

    if(b == 0) return a;
    int sum = a ^ b;
    int carry = (a & b) << 1;

    return add(sum, carry);
}
于 2013-09-25T17:05:49.360 に答える
7

Anti Log()あなたを使ってそれを行うことができます

Temp= Anti Log(a)* Anti Log(b);

a+b value is equals to log(Temp);

double ではなく整数に対して機能します。

于 2013-09-25T17:00:55.363 に答える