[英]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.