将数字的数字与其当前位置相乘,然后使用递归

时间:2016-05-07 12:23:07

标签: c++ function recursion

本练习的目的是将数字的数字乘以其当前位置,然后将其与其他数字相加。 示例:1234 = 1x4 + 2x3 + 3x2 + 4x1 。我使用2个参数成功完成了此代码,现在我正在尝试使用1.我的想法是使用 - 返回num + mult(a / 10)*(a%10)并得到答案,因为从返回num + mult(a / 10)我得到值1,2,3 ,4 (1代表mult(1),2代表mult(12)等)代表 num ,但我注意到这只适用于 mult(1)然后递归得到 mult(12),mult(123),mult(1234)的错误值。我的想法是独立地乘以值来自'num',%10 。对不起,如果我不能很好地解释自己,但我仍然是编程的新手。

#include <iostream>

using namespace std;

int mult(int a){
int num = 1;
if (a==0){
return 1;
}

return ((num + mult(a/10)) * (a%10));

}


int main()
{
int a = 1234;
cout << mult(a);
return 0;

}

2 个答案:

答案 0 :(得分:0)

我发现这更容易,也更符合逻辑,希望这有助于小伙伴。

int k=1;
int a=1234;
int sum=0;
while(a>0){
   sum=sum+k*(a%10);
   a=a/10;
   k++;
}

答案 1 :(得分:0)

如果目标是使用递归并且只有一个参数,那么您可以使用两个函数来实现它。但是,就执行的操作次数而言,这不是最佳的。此外,它更像是数学练习而不是编程练习:

#include <iostream>
using namespace std;
int mult1(int a) {
    if(a == 0) return 0;
    return a % 10 + mult1(a / 10);
}
int mult(int a) {
    if(a == 0) return 0;
    return mult1(a) + mult(a / 10);
}
int main() {
    int a = 1234;
    cout << mult(a) << '\n';
    return 0;
}