Вывести все суммы цифр числа - C#
Формулировка задачи:
Пытался делать переборами, но ничего не выходит. Мне необходимо найти суммы цифр определенного числа. К примеру: Есть число 135. Мне необходимо чтобы в результате отобразились все его суммы цифр. Такие как: 4, 6, 9, 8. Если число 1456, то суммы должны быть: 5, 6, 7, 9, 10, 11, 15, 16. В общем примерно так. Как это можно сделать? Или хотя бы при помощи какого алгоритма?
Нашёл код на С++, но он чуток неверно работает, а на шарп если переводить, то вообще ошибку выдаёт.
Листинг программы
- #define N 10
- int main()
- {
- int A[N] = { 3, 5, 1, 2, 8, 7, 9, 4, 6, 0 };
- int* B = new int[3 * N];
- for (int i = 1, k = 0; i <= N-2; i++)
- {
- B[k] = A[i-1] + A[i+1];
- B[k+1] = A[i+1] + A[i];
- B[k+2] = A[i-1] + A[i];
- B[k+3] = B[k+2] + A[i+1];
- k+=4;
- }
- for (int q = 0; q < 3 * N; q++)
- printf("%d ",B[q]);
- printf("\n");
- }
Решение задачи: «Вывести все суммы цифр числа»
textual
Листинг программы
- class Program
- {
- static IEnumerable<int> Digits(int x, int b)
- {
- do yield return x % b;
- while ((x /= b) > 0);
- }
- static IEnumerable<int> Sums(int x)
- {
- var digits = Digits(x, 10).ToArray();
- for (int k = 1; k < 1 << digits.Length; k++)
- {
- var pos = Digits(k, 2)
- .Select((b, i) => new { b, i })
- .Where(p => p.b == 1);
- if (pos.Count() > 1)
- yield return pos.Sum(p => digits[p.i] * p.b);
- }
- }
- static void Main(string[] args)
- {
- int x = 135;
- Console.WriteLine(x + ": " + String.Join(", ", Sums(x).Distinct().OrderBy(_ => _)));
- Console.ReadKey();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д