How to spend the terminal

技術ブログでさえない

順列と組み合わせの総数を求めるCプログラム

課題で順列と組み合わせの総数を求める問題が出されて、52P10とか非常にめんどいので作ってみた。

//------------------
// ヘッダファイル
//------------------
#include <stdio.h>

//------------------
// マクロ
//------------------

//------------------
// 主処理
//------------------

void PandC( int n, int r ) { // 順列と組み合わせを求める
  //--- 宣言
  int per;  // 順列
  int com;  // 組み合わせ
  int i;
  
  //--- 初期化
  per = 1;
  com = 1;
  
  //--- 計算
  for( i=0; i<r; i++ ) {
    per *= (n-i);
  }
  com = per;
  for( i=1; i<=r; i++ ) {
    com /= i;
  }
  //--- 出力
  printf("順列の総数は%d\n",per);
  printf("組み合わせの総数は%d\n",com);
  
  //--- 終了
  return;
}

int main(void)
{
  //--- 宣言
  int n,r;  // nPrとnCr
  //--- 入力
  while(1) {
    printf("nとrを入力して下さい(nPrとnCr)\n");
    printf("nに-1を入力すると終了です\n");
    scanf("%d %d",&n,&r);
    if( n >= 0 && r >= 0 && n >= r ) {
      PandC(n,r);
    } else if( n == -1 ) {
      break;
    } else {
      printf("正しい値を入力して下さい\n");
    }
  }
  //--- 終了
  return 0;
}

よろしければ使って下さい。
何かバグがあれば報告していただければ幸いです。

10.29 追記
52P10でやってみたところ変な値が出ましたが多分単純に値が大きすぎるからだと思います...