急小弟我急需要C++程序,待!

急急!!!我急需要求一个C++程序,在线等待!!
怎样用c++语言求一个组合数的程序?就是:20!/(8!*(20-8)!)+20!/(9*(20-9)!)+。。。。。。。。。+20!/20!*(20-20)!
      希望高手给我个答案哈!!谢谢哦     !!!

------解决方案--------------------
由于20!已经超过32位了。所以这个题目应该先求 20!/10! -- 20!/20! 以及10! -- 0!
然后相除的 20!/ (10!*10!) -- 20!/(20!*0!),然后相加(按题义,其中有两项会使用2次)

或者用2的20次方减20!/(7!*(20-7)!)+20!/(6!*(20-6)!)+...+20!/(0!*(20-0)!)
减数各项的求法类似。

代码应该不难,就不写了。

------解决方案--------------------
#include <stdio.h>
int a[20];


void comb (int m,int k)

{
int i,j;
for(i=k;i <=m;i++)
{
a[k]=i;
if(k> 1)
comb(i-1,k-1);
else
{
for(j=a[0];j> 0;j--)
{
printf( "%d ",a[j]);
}

printf( "\n ");
}
}
}

void main()
{
a[0]=8;
comb(20,8);
getch();
}
------解决方案--------------------
我原先的想法是:

#include <iostream>
using std::cout;
using std::endl;

int main()
{
unsigned int a[11] = {1}; // 20!/20! -- 20!/10!
unsigned int b[11] = {1}; // 0! -- 10!
unsigned int c[11] = {1}; // 20!/(20!*0!) -- 20!/(10!*10!)
unsigned int d = 1; // sum

for(unsigned int i = 1; i < 11; i++)
{
a[i] = 21-i;
a[i] *= a[i-1];
b[i] = b[i-1] * i;
c[i] = a[i] / b[i];
d += c[i];

cout < < a[i] < < "\t " < < b[i] < < "\t " < < c[i] < < endl;
}

d += c[9] + c[8]; // 20!/(9!*11!) + 20!(8!*12!)

cout < < "The sum is " < < d < < endl;

system( "pause ");

}

但实际上这一厢情愿了。因为 20!/10! 仍然是超过32位的。
稍稍改近后变成这样:

#include <iostream>
using std::cout;
using std::endl;

int main()
{
unsigned int c[11] = {1}; // 20!/(20!*0!) -- 20!/(10!*10!)
unsigned int d = 1;

for(unsigned int i = 1; i < 11; i++)
{
c[i] = c[i-1];
c[i] *= 21-i;
c[i] /= i;
d += c[i];

cout < < c[i] < < endl;
}

d += c[9] + c[8]; // 20!/(9!*11!) + 20!(8!*12!)

cout < < "The sum is " < < d < < endl;

system( "pause ");
}

现在就正确了。
看来有的时候还是动动手比较好,呵呵。