LINUX.ORG.RU

История изменений

Исправление satanic-mechanic, (текущая версия) :

Вот, раз ты на C++ (C) пишешь, перебил быстренько на чистый C, легче будет разобраться.

#include <stdio.h>
#include <math.h>

static unsigned long
dec_c(int n)
{
  static unsigned long C[12][1025];
  int i, j, b;
  int m = log(n) / log(2) + 1;

  for (i = 0; i <= m; ++i)
    C[i][0] = 1;

  for (i = 1, b = 1; i <= m; ++i, b <<= 1)
    for (j = 1; j <= n; ++j) {
      C[i][j] += C[i - 1][j];
      if (j >= b)
        C[i][j] += C[i][j - b];
    }

  return C[m][n];
}

int
main(int argc, char *argv[])
{
  int n = 1024;
  if (argc > 1)
    n = atoi(argv[1]);

  printf("%lu\n", dec_c(n));

  return 0;
}

Исправление satanic-mechanic, :

Вот, раз ты на C++ (C) пишешь, перебил быстренько на чистый C, легче будет разобраться.

#include <stdio.h>
#include <math.h>

static unsigned long C[12][1025];

static unsigned long
dec_c(int n)
{
  int i, j, b;
  int m = log(n) / log(2) + 1;

  for (i = 0; i <= m; ++i)
    C[i][0] = 1;

  for (i = 1, b = 1; i <= m; ++i, b <<= 1)
    for (j = 1; j <= n; ++j) {
      C[i][j] += C[i - 1][j];
      if (j >= b)
        C[i][j] += C[i][j - b];
    }

  return C[m][n];
}

int
main(int argc, char *argv[])
{
  int n = 1024;
  if (argc > 1)
    n = atoi(argv[1]);

  printf("%lu\n", dec_c(n));

  return 0;
}

Исходная версия satanic-mechanic, :

Вот, раз ты на C++ (C) пишешь, вот, перебил быстренько на чистый C, легче будет разобраться.

#include <stdio.h>
#include <math.h>

unsigned long C[12][1025];

static unsigned long
dec_c(int n)
{
  int i, j, b;
  int m = log(n) / log(2) + 1;

  for (i = 0; i <= m; ++i)
    C[i][0] = 1;

  for (i = 1, b = 1; i <= m; ++i, b <<= 1)
    for (j = 1; j <= n; ++j) {
      C[i][j] += C[i - 1][j];
      if (j >= b)
        C[i][j] += C[i][j - b];
    }

  return C[m][n];
}

int
main(int argc, char *argv[])
{
  int n = 1024;
  if (argc > 1)
    n = atoi(argv[1]);

  printf("%ld\n", dec_c(n));

  return 0;
}