我试图在递归中用正确的数字来汇总数字的数字。 例如,如果输入为1234,则输出应为6(1 + 2 + 3)。 如果输入只有1位数,则该函数应返回0.
我不确定如何同时执行这两项操作:计算数字,从结果中删除最后一位数字 如果输入是一个数字,那么它也应该返回0。 我的代码总结了除左数字以外的所有数字。如果我尝试使用revNum函数,那么对于数字'100',例如,结果为0而不是1。 需要任何帮助请:)
int main()
{
int num = 1234;
cout << partSum(num);
}
int sumDigits(int num)
{
if (num<10)
return 0;
return num%10 + sumDigits(num / 10);
}
输出应为:6
答案 0 :(得分:2)
函数sumDigits
应该对数字求和,函数partSum
只是将数字的数字除以10(删除最后一位数字)
int sumDigits(int num)
{
if (num<10)
return num;
return num%10 + sumDigits(num / 10);
}
int partSum(int num)
{
return sumDigits(num/10);
}
int main()
{
int num = 1234;
cout << partSum(num);
}
答案 1 :(得分:1)
sumDigits(n/10)
会移除正确的数字,但您需要修改该功能并return num;
而不是return 0;
int sumDigits(int num)
{
if (num<10)
return num;
return num%10 + sumDigits(num / 10);
}
int main()
{
int num = 1234;
cout << sumDigits(num/10);
}
答案 2 :(得分:0)
你的意思是这样的吗?请注意,您不需要递归。
int sumDigits(int num)
{
int sum = 0;
while (num != 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
int main()
{
int num = 1234;
cout << sumDigits(num / 10);
}
答案 3 :(得分:0)
对于正数而言这是一个黑客攻击。要获得纯粹的递归,一种方法是通过以某种方式标记num
来通知调用它们不是第一次调用,在这种情况下将其变为负数。
JavaScript代码:
function sumDigits(num){
if (num == 0)
return 0;
if (num < 0){
if (num > -10)
return num;
else
return num % 10 + sumDigits(~~(num / 10));
} else {
return -sumDigits(~~(-num/10));
}
}
console.log(sumDigits(1234));