У меня есть целочисленное значение (например: 723), и я хочу добавить все значения в это целое число, пока не получу одно значение.
Я новичок в С#. пожалуйста, дайте мне хорошее объяснение вашего ответа:)
Ответ 2
Хотя решения, в которых вы вытаскиваете нижнюю цифру и делите на десять, являются правильными и четко реализуют желаемую функцию, вы можете выполнить эту задачу в гораздо меньшем количестве кода, если знаете трюк. Если вы суммируете цифры по мере их описания до тех пор, пока не получите одноразрядное число, результат, полученный вами, будет остатком, если вы разделите исходное число на девять.
Попробуйте. 789 --> 7 + 8 + 9 = 24 --> 2 + 4 --> 6, and 789 = 87 * 9 + 6
Итак, вы можете решить свою проблему, просто сделав x % 9
, если x - положительное целое число. Если вы получите нуль, то реальный результат равен девяти, иначе вы получите повторяющуюся сумму цифр.
Этот трюк приводит к способу проверки арифметики, называемой "изгнание девяток" . Предположим, что у вас есть сумма, и вы хотите проверить, правильно ли это:
3147
+ 5926
----
9063
Это правильно? Сделайте свой трюк в каждой строке:
3147 --> 3 + 1 + 4 + 7 = 15 --> 1 + 5 = 6
+ 5926 --> 5 + 9 + 2 + 6 = 22 --> 2 + 2 = 4
----
9063 --> 9 + 0 + 6 + 3 = 18 --> 1 + 8 = 9
Теперь сделайте трюк на сумму. 6 + 4 = 10 --> 1 + 0 = 1
Если вы сделали оригинальную математику справа, то две контрольные суммы должны быть равны, но они не совпадают, первый - 1, а второй - 9. И, конечно же, в десятках место есть ошибка. Правильная сумма
3147 --> 3 + 1 + 4 + 7 = 15 --> 1 + 5 = 6
+ 5926 --> 5 + 9 + 2 + 6 = 22 --> 2 + 2 = 4
----
9073 --> 9 + 0 + 7 + 3 = 19 --> 1 + 9 = 10 --> 1 + 0 = 1
И теперь контрольные суммы одинаковы. 6 + 4 = 10 --> 1 + 0 = 1
Он называется "изгнание девяток" , потому что вы можете игнорировать любые nines, которые находятся в сумме, потому что они не имеют никакого значения:
9123 --> 9 + 1 + 2 + 3 = 15 --> 1 + 5 = 6
, что совпадает с просто 1 + 2 + 3
. Вы можете "изгнать" девять и получить тот же результат.
Теперь вы можете доказать, что сумма цифр - это остаток при делении на девять? Можете ли вы доказать, что изгнание девяток работает на суммы? Можете ли вы вывести и доказать аналогичное правило для проверки продуктов на наличие ошибок?
СПОЙЛЕРЫ НИЖЕ
Определим отношение x≡c, которое означает, что "x и c - неотрицательные целые числа, и существует неотрицательное целое число n такое, что x = 9n + c". То есть, x и c являются "конгруэнтными модными девятью". Получил?
Первое, что нужно доказать: если x≡c и y≡d, то x + y≡c + d.
Это просто. По определению отношения существуют неотрицательные целые числа m и n такие, что x = 9n + c и y = 9m + d. Мы должны показать, что существует неотрицательное целое число p такое, что x + y = 9p + c + d. Это целое число p, очевидно, m + n. Так как существует такое целое число, то соотношение имеет место.
Вторая вещь, чтобы доказать: если x≡c и y≡d, то xy≡cd.
Опять же, мы должны показать, что существует целое число p такое, что xy = 9p + cd. Аналогичным доказательством первой теоремы является p = 9nm + mc + nd, поэтому соотношение имеет место.
Третье доказательство: 10 n ≡1 для любого неотрицательного целого n.
Доказательство легко по индукции:
- Ясно, что 10 0 ≡1
- Ясно, что 10 1 ≡1
- Сделайте индуктивную гипотезу: предположим, что 10 k ≡1, где k > 0.
- 10 к + 1= 10 1 10 к
- 10 1 10 k ≡ (1) (1) нашим вторым доказательством.
- Поэтому, если 10 k ≡1, то 10 k + 1 ≡1
- Поэтому по индукции 10 n ≡1 для всех неотрицательных целых чисел n.
Из этих трех теорем вы можете теперь видеть, что
a (10 2) + b (10 1) + c (10 0) ≡ a + b + c
Итак, мы показали, что число в десятичной системе обозначений является "конгруэнтным модом девяти" к сумме его цифр.
Тот факт, что "изгнание девяток" работает как арифметическая контрольная сумма, теперь сразу следует из нашего первого доказательства.