参考書で習ったことを活用し1C1から10C10までの組み合わせを求めようとしているのですが、2C2のところで2と表示されてしまいます。どこを改善したらいいのでしょうか。求め方はnCr=n!/{r!・(n-r)!}を使っています。まだ勉強し始めたばっかりなので読みにくいところがあると思いますがどうぞ宜しくお願い致します。
以下ソースコード↓
//組み合わせ
#include<stdio.h>
int combination(int, int);
int main()
{
int a, b;
int c = 1;
for (a = 1; a <= 10; a++) { //何個から選ぶか
for(b=1;a>=b;b++){ //取り出す個数
c = combination(a,b);
printf("%dC%d=%d\n", a, b, c); //表示する
}
}
return 0;
}
int combination(int a, int b) //組み合わせを求める
{
int i,k,l;
int fact = 1;
int lie = 1;
int bit = 1;
for (i = 1; i <= a; i++) { //上の階乗
fact = fact*i;
}
for (k = 1; k <= b; b++) { //下の階乗
lie = lie*k;
}
if (a>b) { //下の階乗
for (l = 1; l <= (a - b); l++) {
bit = bit*l;
}
}
else {
bit = 1;
}
return (fact / (lie*bit));
}