Вывести все суммы цифр числа - 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();
}
}