[求助]求组合数
问题描述在平面中给出了n个点。这些点任三点不共线,并且每两个点之间都有一条线相连,求三角形的数目。
输入
输入文件只有一行,这一行有若干个整数,相邻两个整数用一个空格隔开。每个整数N满足(1<=N<=2,000,000)。
输出
输出文件有若干行。对输入文件中的每个整数N,输出一行,输出内容是三角形的数目。
输入样例
3 4 5
输出样例
1
4
10
我的程序:
#include "stdio.h"
#include<fstream.h>
ifstream fin("input.txt");
ofstream fout("output.txt");
#define cin fin
#define cout fout
void MultiplyH(int a[],int b[],int c[],int d[]) // 高精度×高精度
{
int temp[13];
int i,j;
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
{
temp[i+j]=a[i]*b[j];
temp[i+j+1]+=temp[i+j]/10;
temp[i+j]%=10;
}
}
for(i=0;i<13;i++)
{
for(j=0;j<7;j++)
{
d[i+j]=temp[i]*c[j];
d[i+j+1]+=d[i+j]/10;
d[i+j]%=10;
}
}
}
void Divide(int a[],int b,int c[]) // 高精度/单精度
{
int i,d=0;
for(i=18;i>=0;i--)
{
d=d*10+a[i];
c[i]=d/b;
d%=b;
}
}
void main()
{
int n,i,j,SubPoint;
while(cin>>n)
{
int a[7],b[7],c[7],d[19],e[19];
for(i=0;i<7;i++) // Initialize a[7]
{
a[i]=n%10;
n=n/10;
}
if(a[0]!=0) // Initialize b[7]
{
b[0]=a[0]-1;
for(i=1;i<7;i++) b[i]=a[i];
}
else{
i=1;
while(a[i]=0) i++;
SubPoint=i;
for(i=0;i<SubPoint;i++) b[i]=9;
b[SubPoint]=a[SubPoint]-1;
for(i=SubPoint+1;i<7;i++) b[i]=a[i];
}
if(b[0]!=0) // Initialize c[7]
{
c[0]=b[0]-1;
for(i=1;i<7;i++) c[i]=b[i];
}
else{
i=1;
while(b[i]=0) i++;
SubPoint=i;
for(i=0;i<SubPoint;i++) c[i]=9;
c[SubPoint]=b[SubPoint]-1;
for(i=SubPoint+1;i<7;i++) c[i]=b[i];
}
MultiplyH(a,b,c,d);
Divide(d,6,e);
i=18;
while(e[i]=0) i--;
for(j=i;j>=0;j--) cout<<e[j];
cout<<endl;
}
}
请问我的程序哪儿不对? 谢谢!