poj 1306 Combinations
下面给出两种方法^-^(都AC!!!)
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define For(i, a, b) for(int i = a; i <= b; i++)
#define ULL unsigned long long
ULL C(int k, int n){
ULL ret = 1LL;
For(i, 1, k)
ret = (ret*(n-i+1))/i;
return ret;
}
int main(){
int n, k;
while(scanf("%d%d", &n, &k) != EOF){
if(!n && !k) break;
int tmp = n-k, rk = k;
k = min(tmp, k);
printf("%d things taken %d at a time is %llu exactly.\n", n, rk, C(k, n));
}
return 0;
}
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define Forr(i, a, b) for(int i = a; i >= b; i--)
#define ULL unsigned long long
ULL C(int k, int n){
ULL ret = 1LL;
int j = 2;
Forr(i, n, n-k+1){
ret *= i;
while(ret % j == 0 && j <= k) ret /= j++;
}
return ret;
}
int main(){
int n, k;
while(scanf("%d%d", &n, &k) != EOF){
if(!n && !k) break;
int rk = k;
int tmp = n-k;
k = min(tmp, k);
printf("%d things taken %d at a time is %llu exactly.\n", n, rk, C(k, n));
}
return 0;
}