Создание программы C#, которая вычисляет сумму отдельных цифр данного числа - PullRequest
0 голосов
/ 30 марта 2020

Поэтому для практики я решил попытаться создать программу C#, которая вычисляет сумму отдельных цифр заданного значения (например, если бы я должен был ввести число 123, сумма должна быть 6, потому что 1 + 2 + 3. добавьте каждый отдельный номер в список, а затем найдите сумму этого списка, чтобы получить мой ответ. Однако, когда я делаю это, как показано в приведенном ниже коде:

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.

Почему в том, что? Это из-за того, что я отправляю индекс строки вместо реального int? И если так, как я могу это исправить?

1 Ответ

2 голосов
/ 30 марта 2020

myNum - строка, это означает, что myNum[i] вернет символ, а не int. Тем не менее, char неявно преобразуется в int в вашем случае, но вы все равно получаете ASCII-значение символа.

В вашем случае эти символы оказываются '1', '2' и '3', которые имеют значения ASCII 49, 50 и 51 соответственно. Чтобы увидеть другие значения ASCII, поищите в Inte rnet «таблицу ASCII».

Чтобы исправить свой код, необходимо преобразовать эти значения ASCII обратно в их десятичное значение, вычитая значение '0' -характер:

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

Кроме того, вам не нужно преобразовывать число в строку, вы можете использовать модуль 10, чтобы получить самый правый ди git: num % 10, а затем разделите num с 10, чтобы перейти к следующему ди git: num /= 10;. Сделайте это в al oop, пока num отличается от нуля.

while (num > 0)
{
   sumOfNum += num % 10;
   num /= 10;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...