所有数字C#整数的乘积

时间:2017-10-21 12:47:32

标签: c# recursion

我正在尝试编写一个递归程序,该程序将获取用户输入的数字,然后让程序能够计算整数的所有数字的乘积。我已经弄清楚我希望程序如何运行,但我无法弄清楚如何运行循环来计算所有数字的乘积。我发现你可以用语言c来做这个,使用num%10来检索num的最后一位,而num / 10用来从整数末尾一次剥离一个数字。我只是无法弄清楚如何在C#中实现它以及if / else结构应该如何实现。

下面是我为程序编写的代码,除了编写if / else语句的代码之外。如果有人能够指出我如何实现这一目标的正确方向,那将是值得赞赏的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace _3
{
class Tester
 {
    public static void Main(string[] args)
    {
        int length;
        Write("Enter a number: ");
        string num = Console.ReadLine();
        length = num.Length;
        int productofnum = Int32.Parse(num);
        productofnum = CalcProduct(productofnum);
        WriteLine("The product of all digits of the number {0} is {1}.",num, productofnum);
    }
    public static int CalcProduct(int num)
    {
        int length = num.ToString().Length;
        if (length == 0)
        {

        }
        else
        {
        }
        return num;
    }
 }
}

2 个答案:

答案 0 :(得分:1)

首先使用递归函数时,你不应该有任何循环。

您几乎正确地构建了方法的结构,但需要进行一些更改:

public static int CalcProduct(int num)
{
    int length = num.ToString().Length;
    if (length == 1)
    {
        return num;
    }
    return (num % 10) * CalcProduct(num / 10);
}

说明:

当使用递归函数时,通常需要在返回时调用您正在使用的函数 - 因此它将在Recursive methods using C#处进行递归阅读。

答案 1 :(得分:1)

建立在Yonlif的回答之上:如果你希望你的程序也能够使用负数,那么在使用div和mod之前不要忘记使用Math.Abs​​(num)。像这样:

generator()

另外,如果您愿意,这里是尾递归方法:

public static int CalcProduct(int num)
{
    int _num=Math.Abs(num);
    int length = _num.ToString().Length;
    if (length == 1)
    {
        return _num;
    }
    return (_num % 10) * CalcProduct(_num / 10);
}