繁体   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