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