我正在做一项任务,要求我添加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;
}
}
答案 0 :(得分:1)
很明显,如果您按照手动程序进行操作。让我们按照添加(8,7,0):
错误在于:你得到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;
}