Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个C#程序,计算给定数字的各个数字之和_C# - Fatal编程技术网

创建一个C#程序,计算给定数字的各个数字之和

创建一个C#程序,计算给定数字的各个数字之和,c#,C#,因此,为了练习,我决定尝试创建一个C#程序,计算给定数字的各个数字之和(例如,如果我输入数字123,那么总和应该是6,因为1+2+3..) 我的思考过程是,我将使用for循环迭代特定的数字(不过我必须先将数字转换为字符串),将每个数字添加到列表中,然后找到该列表的总和,以获得我的答案。但是,当我这样做时,如下代码所示: static void Main(string[] args) { int num; int sumOfNum =

因此,为了练习,我决定尝试创建一个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);

        } 
我没有得到值1,2和3,而是得到49,50,51


为什么呢?是不是因为我发送的是字符串的索引,而不是实际的int?如果是这样,我如何修复它呢?

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;
}

将转换为ascii字符,其中数字为0x30到0x39,因此必须从每个数字中减去0x30:int input=123;int output=input.ToString()。选择(x=>(int)x-(int)“0”).Sum();Doing
sumOfNum=numbersToAdd.Sum()在循环中,不会有任何区别,因为它会一次又一次地返回相同的值。您提供的另一种方法非常出色,它背后的思想过程是什么?我不知道,我直觉地想到了。怪我使用各种协议和算法的历史;)啊,我想这就是当你在编码方面有很多经验时会发生的事情,哈哈。无论如何,谢谢你!
while (num > 0)
{
   sumOfNum += num % 10;
   num /= 10;
}