История изменений
Исправление 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;
}