【问题标题】:Multiplying a digit of a number with its current position and then add it with the others using recursion将数字的一位数字与其当前位置相乘,然后使用递归将其与其他数字相加
【发布时间】:2016-05-07 12:23:06
【问题描述】:

这个练习的重点是将一个数字的一​​个数字乘以它的当前位置,然后将它与其他数字相加。 示例:1234 = 1x4 + 2x3 + 3x2 + 4x1。我使用 2 个参数成功完成了这段代码,现在我尝试用 1 来完成。我的想法是使用 - return num + mult(a/10) * (a%10) 并得到答案,因为从 return num + mult(a/10) 我得到值 1,2,3 ,4- (1 表示 mult(1),2 表示 mult(12),等等) 表示 num,但我注意到这仅适用于 mult(1) 然后递归得到 mult(12)、mult(123)、mult(1234) 的错误值。 我的想法是独立地将值相乘 来自 'num' 和 a%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;

}

【问题讨论】:

  • 我知道,告诉我的导师。但不难猜到,在 1x4 中,4 代表位置而不是数字..

标签: c++ function recursion


【解决方案1】:

我觉得这样做更容易,更合乎逻辑,希望这对小伙子有帮助。

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

【讨论】:

  • 非常感谢您的回答!我知道这样做更容易,也更合乎逻辑,但这是我的教授给我们的练习,我没有太多选择..
【解决方案2】:

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

#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2020-06-01
    • 2023-04-10
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多