Сумма цифр числа в C #?
Я пытаюсь написать код, который суммирует цифры числа, и он должен работать, но я не могу найти, где я делаю это неправильно, у меня есть рабочий код в Python для этого, и я пытался сделать это таким же образом в C # но .. вот два кода
Редактировать: я использовал отладчик, и я обнаружил, что когда я конвертирую числа, они оказываются совершенно разными числами, но если я конвертирую всю строку, то она конвертируется правильно . как это исправить?
7 ответов
num[i] является char и Convert.ToInt32 вернет код ASCII символа вместо фактического числового значения. Использование:
Также измените i < num.Length-1 на i < num.Length
Изменить . Чтобы сделать это более понятным, приведем пример:
Вы можете объединить несколько вещей.
Вы можете выбрать коллекцию char из string , используя Linq (Sum () — это метод Linq).
Вам все еще нужно преобразовать эти символы в числа; Вы можете сделать это, преобразовав символ в строку и проанализировав его, или вы можете использовать другой встроенный метод.
char , по своей сути, просто число. Это просто число, представляющее символ.
Вот некоторые решения, которые подчеркивают это:
В конце строки C # нет нуля, так что вам не нужно об этом беспокоиться, и, следовательно, не требуется «-1» в цикле. Тем не менее, есть гораздо более простой способ:
Это преобразует строку в массив символов, преобразует их все в целые числа (возвращая IEnumerable<int> в процессе), а затем возвращает сумму их всех.
Convert.ToInt32(num[i]); даст вам значение ASCII для цифры символа. Например, для символа 1 вы получите 49 .
Используйте char.GetNumericValue как:
Вам также нужно изменить цикл, чтобы он продолжался до длины, поскольку вы используете < .
Сумма цифр числа 100!
Написал код для подсчета суммы цифр в числе 100! для решения задачи на Проекте Эйлера. До этого успешно использовал кусок кода, который непосредственно подсчитывает сумму цифр, для решения аналогичной задачи с числом 2 в 1000 степени. Однако в случае с 100! результат неправильный. В чем проблема?
![]()
![]()
Задачу по-видимому придется решать в лоб, т.е. через длинную арифметику. Если все делать «руками», то это сразу приводит к дилемме:
Реализовывать длинное число в виде массива десятичных цифр, что сделает вычисление финальной суммы тривиальной операцией, но существенно удлинит и замедлит процесс длинного умножения.
Реализовывать длинное число в виде массива цифр в системе счисления с основанием 2 n/2 , где n — это ширина самого широкого умножения, поддерживаемого данной С++ платформой. Это ускорит длинное умножение, но потребует реализации длинного деления на 10 для того, чтобы получить цифры для сложения в финале.
Меня больше привлекает именно второй вариант. Например, (не гоняясь за процессорными тактами в операциях умножения и деления)
Пользуясь идей, предложенной @Германом Борисовым в комментариях, можно получить эффективный компромисс между этими двумя подходами: используем систему счисления с основанием 10 n , где n выбирается максимально возможным так, чтобы перемножение двух цифр не приводило к переполнению на данной С++ платформе.
При этом функция умножения останется почти неизменной, а функция вычисления суммы цифр существенно упростится (полноценная функция деления станет ненужной)
Эксперимент на QuickBench показывает, что это — существенно более эффективный подход
Разумеется, первый вариант не настолько эффективен, насколько он мог бы быть — из-за неэффективной реализации операции деления. Однако цели оптимизации и не ставилось. Все варианты работают за более чем приемлемое время.
Как найти сумму цифр числа в c
Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите восстановить пароль
| Поиск по форуму |
| Расширенный поиск |
| К странице. |

памагите кто небудь разобраться со втарой частию! найти сумму чисел состовляющих числа.
Модератор: тег CODE
вот так у меня получилось
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке — https://slurm.club/3MeqNEk