原题链接:蓝桥杯2013年第四届真题-公式求值
解题思路:
因为数据大,所以用了无损乘法和无损加法和无损求余,能得出答案,多大都行。
但是超极限了,希望有大佬帮帮忙....
注意事项:
参考代码:
#include<stdio.h>
#include<string.h>
char sum[2000],zsum[2000];
char mulfun(long long m,long long n)
{
int a[1000],b[1000],c[2000];
int i=0,j=0,x,y;
while(m){c[i++]=m%10;m=m/10;}x=i;i--;
while(i>=0)a[j++]=c[i--];
i=0;j=0;
while(n){c[i++]=n%10;n=n/10;}y=i;i--;
while(i>=0)b[j++]=c[i--];
memset(c,0,sizeof(c));
for(i=0;i<x;i++)
for(j=0;j<y;j++)
c[i+j]+=a[i]*b[j];
for(i=x+y-1;i>0;i--)
{
c[i-1]=c[i-1]+c[i]/10;
c[i]=c[i]%10;
}
for(i=0;i<x+y-1;i++)sum[i]=c[i]+48;
return 0;
}
char addfun(char a[],char b[])
{
char c[10000],*m=a,*n=b,*k,*k1,t;
int s=0,i=0,w=0,j=0;
while(*m)m++;m--;
while(*n)n++;n--;
while(m>=a&&n>=b)
{
s=*m+*n+w-48-48;
c[i++]=s%10+48;
w=s/10;
m--;n--;
}
if(strlen(a)>strlen(b)){k=m;k1=a;}
else {k=n;k1=b;}
while(k>=k1)
{
c[i++]=(*k-48+w)%10+48;
w=(*k-48+w)/10;
k--;
}
if(w!=0)c[i]=w+48;
else i--;
while(i>=0)zsum[j++]=c[i--];
return 0;
}
long long assfun(long long n,long long m)
{
if(m==0||n==m)return 1;
return assfun(n-1,m-1)+assfun(n-1,m);
}
long long fafun(long long i,long long k)
{
if(k==1)return i;
return i*fafun(i,k-1);
}
long long remainde(char s[],long long m)
{
int a[10000];
long i,j,k,r,s1;
s1=strlen(s);
for(i=0;i<s1;i++)
a[i]=s[i]-48;
for(i=0,r=0;i<s1;i++)
{
a[i]=a[i]+r*10;
r=a[i]%m;
a[i]=a[i]/m;
}
printf("%lld",r);
}
int main()
{
long long a,b,c,n,m,i=0,k,k1,k2,k3,s;
scanf("%ld%ld%ld",&n,&m,&k);
k1=assfun(n,m);
for(i=0;i<=n;i++)
{
k2=assfun(n,i);
k3=fafun(i,k);
mulfun(k2,k1*k3);
addfun(zsum,sum);
memset(sum,0,sizeof(sum));
}
remainde(zsum,999101);
return 0;
}0.0分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复