总和,数字的乘积不等于0和位数...在C#中的WITH SWITCH

时间:2017-10-21 14:15:48

标签: c# if-statement switch-statement product digits

我是编程的新手,尤其是涉及到C#,但今年我正在研究它,并且我意识到我喜欢它并且真的想要理解它。但是,我们的老师让我们自己学习。好吧,没问题,互联网就像它一样令人惊叹。

所以我把这个练习作为家庭作业:

====计算总和,数字不等于0的乘积和整数的位数。====

事情是,我只知道怎么做,而且如果并且它完美地工作,但是她希望我们也可以用SWITCH做到这一点,这就是我失去的地方,因为我只是没有'知道如何建立案例(当案例为0时它很好,但是当数字或n!= 0时,我怎么写案例?!)

我真的需要一些这方面的帮助,并希望sosososo给予任何帮助!另外,你能提供一个解释吗?非常感谢! :d

int n, s = 0, p = 1, d = 0, digit;
Console.Write("Number n : ");
n = Convert.ToInt32(Console.ReadLine());

if (n == 0)
    p = 0;
do
{
    digit = n % 10;
    s += digit;
    if (digit != 0)
        p *= digit;
    d++;
    n /= 10;
} while (n != 0);
Console.WriteLine("The sum of the digits is: {0} ", s);
Console.WriteLine("The product of the digits not equal to 0 is : {0} ", p);
Console.WriteLine("The number of the digits is: {0}", d);
Console.ReadKey();

1 个答案:

答案 0 :(得分:0)

您无法在开关/案例中打印所有可能的组合,但您至少可以在“0”和“非0”之间有所不同:

switch(n)
{
     case 0: // n == 0
         p = 0;
         break;
     default: // this runs in any case but zero
         do
         {
             digit = n % 10;
             s += digit;
             if (digit != 0)
                 p *= digit;
             d++;
             n /= 10;
         } while (n != 0);
         break;
}

也许就是这个,老师想告诉你的:开关的default情况,基本上就是“其他一切”。

关于你对n的分析...当然你可以把它解析成int和那个divison / modulo的东西,但是你是新手编程的,也许你不知道你可以读取一个字符串char -by-char通过索引:

string input = Console.ReadLine();
foreach (char c in input)
{
    int digit = Convert.ToInt32(c);
    s += digit;
    p *= digit;
}

此foreach将运行您的字符串char-by-char并将下一个字符存储在c中。这个代码比你的div / mod版本更容易阅读。简单易懂的代码有助于理解。

当像这样更改时,您的开关将如下所示:

switch (input.Length)
{
    case 0:
        p = 0;
        break;
    default:
        // the foreach loop from above
        break;
}

希望这有助于,欢呼,格里斯