2017-10-21 178 views
0

我新的節目,尤其是當它涉及到C#,但今年我學習它,我知道我做的喜歡它,真的想要理解它。但是,我們的老師讓我們自己學習。好的,沒有問題,互聯網是如此驚人。總和,數字不等於0,位數產品...在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

如果我們有辦法趕上未在上市的情況下,開關構造... – Funk

+0

有趣的是,這至少是第二個問題與相同的話題(數字乘積...)我今天讀了...切換在這裏解釋:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch – Michael

+0

說你的老師你想用Linq :)'string str =「12345」; var s = str.Sum(x => x - '0'); var p = str.Select(x => x - '0')。Aggregate((y,i)=> y * = i);' –

回答

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-由炭:

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

這的foreach將通過您的字符串運行字符按char和下一個字符存儲在c。這個代碼比你的div/mod版本更容易閱讀。簡單和乾淨的代碼有助於理解。

當改變像這樣,你的開關看起來像:

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

希望這會有所幫助,歡呼聲,格里斯

+0

謝謝,格里斯!是的,這是....啓發xD 比我預期的更容易的解決方案 – EfyB

+0

接受答案是一個很好的方式來說聲謝謝你在這個網站。謝謝。 – Grisgram