我试图以递归方式减去数字,假设我有数字125,然后以这种方式进行减法
rosbuild_add_executable
我已经完成了递归的总和,但我一直在思考它,因为我试图获取每个数字,然后以这种方式在函数本身中减去它
5-2-1 = 2
我知道这个功能不起作用,但它是我尝试过的很多组合,我觉得我太复杂了,任何帮助/建议都会受到高度赞赏!
答案 0 :(得分:2)
您可以简化任务,因为5 - 2 - 1
等于5 - (2 + 1)
,因此我们可以将除最高位之外的所有数字相加,并从中减去此总和。
int subtractDigits(const unsigned int n, const bool first = true){
if(n == 0){
return 0;
}
if(first){
return n % 10 - subtractDigits(n / 10, false);
}
else{
return n % 10 + subtractDigits(n / 10, false);
}
}
答案 1 :(得分:0)
AHHH这个很棘手
#include <stdio.h>
int restaDigitos(int n){
printf("Processing: %d\n", n);
printf("division: %d\n", n/10);
if(n==0){
return 0;
}else{
return n%10 + restaDigitos(n/10);
}
}
int main() {
int input = 125;
int firstVal = input % 10;
int result = restaDigitos(input / 10);
printf("result: %d\n", firstVal - result);
}
进行了两次重大修正:
希望这有帮助!
答案 2 :(得分:0)
问题是你也减去了最后一个数字(0 - 1 - 2 - 5),但是从你的问题我可以看出,你想要添加它(0 - 1 -2 + 5)。我的解决方案是添加另一个指定位数的参数,以便您知道何时添加而不是减去
int RecursiveMath::restaDigitos(int n, int numDigits){
if (n == 0) {
return 0;
} else if (n / (pow(10, numDigits - 1)) >= 1){
return restaDigitos(n/10, numDigits) + n % 10;
} else {
return restaDigitos(n / 10, numDigits) - n % 10;
}
}
答案 3 :(得分:0)
您正在以不同于其他值的方式处理第一个值。这样的用例会导致一种棘手的递归方式,使用默认参数或一次性解决方案的静态值。
您可以在这里使用:
int restaDigitos(int val, bool first = true, int curr = 0) {
if (val == 0) return curr;
if (first) curr = val%10;
else curr -= val%10;
return restaDigitos(val/10, false, curr);
}
您可以按预期控制restaDigitos(125);
给出2。