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

使用按位^&运算符和递归

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);

适用于整数而不是双精度。

于 2013-09-25T17:00:55.363 回答
2
#include<stdio.h>

int add(int a, int b) {
    return (int)&((char *)a)[b];
}

int main() {
    printf("%d", add(5, 17));
    getchar();
}

不可移植,但不使用“+”字符。这会将 a 转换为 char 指针,用 [] 将 b 添加到它,然后将其转换回 int。

于 2013-09-25T19:09:40.737 回答