| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:康拓展开+高精度In Reply To:康拓展开+高精度 Posted by:infoG at 2013-11-10 16:58:43 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct bignumber
{
int dig;
int d[100];
} c1={1,0,1};
bignumber jc[55],ans;
int f[55];
int i,j,k,n,l,m,ii=0;
char s[200];
bignumber cheng(bignumber a,int b)
{
bignumber c=a;
int i;
for (i=1;i<=c.dig;i++)
c.d[i]=c.d[i]*b;
for (i=1;i<=c.dig;i++)
{
if (c.d[i]>=10)
{
c.d[i+1]+=c.d[i]/10;
c.d[i]=c.d[i]%10;
}
}
while (c.d[c.dig+1]>0)
{
c.dig++;
if (c.d[c.dig]>=10)
{
c.d[c.dig+1]+=c.d[c.dig]/10;
c.d[c.dig]=c.d[c.dig]%10;
}
}
return c;
}
bignumber jia(bignumber a,bignumber b)
{
bignumber c=a;
int i,l;
if (a.dig>b.dig) l=a.dig;
else l=b.dig;
for (i=1;i<=l;i++)
c.d[i]=a.d[i]+b.d[i];
for (i=1;i<=c.dig;i++)
{
if (c.d[i]>=10)
{
c.d[i+1]+=c.d[i]/10;
c.d[i]=c.d[i]%10;
}
}
while (c.d[c.dig+1]>0)
{
c.dig++;
if (c.d[c.dig]>=10)
{
c.d[c.dig+1]+=c.d[c.dig]/10;
c.d[c.dig]=c.d[c.dig]%10;
}
}
return c;
}
bignumber zhankai(int n)
{
int i,j,temp;
bignumber t;
t.dig=1;
memset(t.d,0,sizeof(t.d));
for (i=0;i<n;i++)
{
temp=0;
for (j=i+1;j<n;j++)
if (f[j]<f[i]) temp++;
t=jia(t,cheng(jc[n-i-1],temp));
}
return t;
}
int main()
{
jc[1].dig=1;jc[1].d[1]=1;
for (i=2;i<=55;i++)
jc[i]=cheng(jc[i-1],i);
ii=0;
while (scanf("%s",s),s[0]!='-')
{
ii++;
l=strlen(s);
k=0;
for (i=0;i<=3;i++)
if (s[i]>='0'&&s[i]<='9') k=k*10+s[i]-48;
n=k;
j=3;k=0;
do
{
j++;
}
while (s[j]<'0'||s[j]>'9');
m=0;
for (i=j;i<l;i++)
{
if (s[i]>='0'&&s[i]<='9') k=k*10+s[i]-48;
else
{
f[m]=k;
k=0;
m++;
}
}
if (ii!=1) printf(",");
ans=jia(zhankai(n),c1);
for (i=ans.dig;i>=1;i--)
printf("%d",ans.d[i]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator