落書きノート

ふと自分が気になった事を書いてます

C言語で問題を解く

解きながら学ぶC言語

解きながら学ぶC言語

// q8-6
#include <stdio.h>

int factorial(int n) {
  if(n == 1)
    return n;
  return n * factorial(n - 1);
}

int main(void) {
  int n;
  printf("整数を入力してください : ");
  scanf("%d", &n);
  printf("その数の階乗は%dです。\n", factorial(n));
  return 0;
}

// q8-6-another
#include <stdio.h>

int factorial(int n) {
  return n > 0 ? n * factorial(n - 1) : 1;
}

int main(void) {
  int n;
  printf("整数を入力してください : ");
  scanf("%d", &n);
  printf("その数の階乗は%dです。\n", factorial(n));
  return 0;
}

// q8-7
#include <stdio.h>

int fact(int n) {
  int i, sum = 1;
  for(i = 1; i <= n; i++)
    sum *= i;
  return sum;
}

int main(void) {
  int n;
  printf("整数を入力してください : ");
  scanf("%d", &n);
  printf("その数の階乗は%dです。\n", fact(n));
  return 0;
}

// q8-7-another
#include <stdio.h>

int fact(int n) {
  int f = 1;
  while(n > 0)
    f *= n--;
  return f;
}

int main(void) {
  int n;
  printf("整数を入力してください : ");
  scanf("%d", &n);
  printf("その数の階乗は%dです。\n", fact(n));
  return 0;
}

// q8-8
#include <stdio.h>

int combination(int n, int r) {
  if(r == 0 || r == n)
    return 1;
  else if(r == 1)
    return n;
  return combination(n - 1, r - 1) + combination(n - 1, r);
}

int main(void) {
  int n, r;
  printf("n : ");
  scanf("%d", &n);
  printf("r : ");
  scanf("%d", &r);
  printf("組み合わせの数は%dです。\n", combination(n, r));
  return 0;
}