随身携带增加2个整数

时间:2016-11-15 10:14:11

标签: c

我正在做一项任务,要求我添加2个int并要求我做递归。下面是我的代码,但我的输出总是比答案多10。为什么?我的初始进位是0.

int add(int n1,int n2,int carry){

    if(n1>0){

        if(carry == 1)
            n1= n1+1;

        if((n1%10+n2%10)>9)
            return n1%10 + n2%10 + 10*add(n1/10,n2/10,1);
        else    
            return n1%10 + n2%10 + 10*add(n1/10,n2/10,0);

    }

    else{
        return 0;
    }
}

2 个答案:

答案 0 :(得分:1)

很明显,如果您按照手动程序进行操作。让我们按照添加(8,7,0):

  • 携带是0:无事可做
  • n1%10 + n2%10 = 15> 9:好的,我们将有一个随身携带 返回8 + 7 + 10 *加(0,0,1)!

错误在于:你得到25而不是15,因为你正确地添加了进位但是没有使用总和的mod:它应该是((8 + 7)%10)+ 10 * add(0, 0,1)

所以你的代码应该成为:

...
if((n1%10+n2%10)>9) {
    return ((n1%10 + n2%10) % 10) + 10*add(n1/10,n2/10,1);
}
else {   
    ...

但这段代码只对学术目的有意义。在现实世界的代码中它会很糟糕,因为你在32位(或更多)处理器上模拟基于10的操作......

答案 1 :(得分:-1)

希望它对你有所帮助。

#include <stdio.h>    
int add(int n1,int n2)
{
        if(n2==0)
                return;

        int carry = n1&n2;
        n1 = n1^n2;
        n2 = carry<<1;
        add(n1,n2);
}
int main()
{
        printf("%d\n",add(29,16));
        return 0;
}