簡體   English   中英

創建一個 C# 程序來計算給定數字的各個數字的總和

[英]Creating a C# program that calculates sum of the individual digits of a given number

所以為了練習,我決定嘗試創建一個 C# 程序,計算給定的各個數字的總和(例如,如果我輸入數字 123,總和應該是 6,因為 1 + 2 + 3.. )

我的思考過程是,我將使用 for 循環遍歷特定數字(盡管我必須先將數字轉換為字符串),將每個單獨的數字添加到列表中,然后找到該列表的總和,為了得到我的答案。 但是,當我這樣做時,如下面的代碼所示:

static void Main(string[] args)
        {
            int num;
            int sumOfNum = 0;
            List<int> numbersToAdd = new List<int>();

            Console.WriteLine("insert number: ");
            num = Convert.ToInt32(Console.ReadLine());
            string myNum = num.ToString();


            for (int i = 0; i < myNum.Length; i++)
            {
                numbersToAdd.Add(myNum[i]);


            }
            foreach (int n in numbersToAdd)
            {
                sumOfNum = numbersToAdd.Sum();
            }
            Console.WriteLine("the sum is " + sumOfNum);

        } 

我的輸出不是 6,而是 150。我覺得這很奇怪,所以當我決定遍歷我的列表時,我可以看到我的值,如下所示:

 foreach (int n in numbersToAdd)
            {
                Console.WriteLine(n);
            }

我沒有得到值 1、2 和 3,而是得到 49、50、51。

這是為什么? 是因為我發送的是字符串的索引,而不是實際的整數嗎? 如果是這樣,我該如何解決?

myNum是一個字符串,這意味着myNum[i]將返回一個字符而不是一個int 但是,在您的情況下, char被隱式轉換為int ,但您仍然可以獲得字符的 ASCII 值。

在您的情況下,這些字符恰好是'1''2''3' ,它們的 ASCII 值分別為 49、50 和 51。 要查看其他 ASCII 值,請在 Internet 上搜索“ASCII 表”。

要修復您的代碼,您必須通過減去'0'字符的值將這些 ASCII 值轉換回十進制值:

numbersToAdd.Add(myNum[i] - '0');

除此之外,您不必將數字轉換為字符串,您可以使用模數 10 來獲得最右邊的數字: num % 10然后將num除以 10 以前進到下一個數字: num /= 10; . 只要num不為零,就在循環中執行此操作。

while (num > 0)
{
   sumOfNum += num % 10;
   num /= 10;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM