解题思路其实我是错误答案,我只想问问哪错了,在低数值的情况下可以算出正确答案

注意事项:不明白


参考代码:

#include<stdio.h>
int fow(int i,int k);
int j(int n);
int C(int m,int n);
int main()
{
 int i,n,sum=0,k,m;
 scanf("%d%d%d",&n,&m,&k);
 for(i=1;i<=n;i++)
 {
  sum=sum+C(n,i)*C(n,m)*fow(i,k);
 }
 printf("%d\n",sum%999101);
}
int fow(int i,int k)
{
 int j,sum=1;
 for(j=1;j<=k;j++)
 {
  sum=sum*i;
 }
 return sum;
}
int j(int n)
{
 int sum=1,i;
 for(i=1;i<=n;i++)
 {
  sum=sum*i;
 }
 return sum;
}
int C(int m,int n)
{
 int sum;
 sum=j(m)/j(n)/j(m-n);
 return sum;
}

点赞(2)
 

0.0分

5 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 11 条评论

不想摸鱼 1年前 回复TA
请问有人写出来了吗
Absurd 2年前 回复TA
@若民笙歌 从变量声明开始就看不下去了,来看一眼评论,果然是个大聪明……
小姜骑猪 2年前 回复TA
#include<stdio.h>
#include<math.h>
int fun(int n,int i)
{

	if(n>=1&&i>0)
		return n * fun(n - 1,--i);
	else
		return 1;
}
int main()
{
	int i, j, n, m, k, c;
	double sum = 0;
	scanf("%d%d%d", &n, &m, &k);
	c = fun(n,m) / fun(m,m);
	for (i = 1; i <= n; i++)
	{
		double a = pow(i, k);
		unsigned long b = fun(n,i)/fun(i,i);
		sum = sum + a * b;
	}
	sum = sum*c;
	unsigned long d = (unsigned long)sum;
	d = d % 999101;
	printf("%d", d);
	return 0;
}
可以运行出来,但是提交说运行错误,怎么解决,哪里有问题?求大佬告知
弗莱 2年前 回复TA
@若民笙歌 对个锤子,你这个输入大一点结果都跑不出来
夜猫子的自救 2年前 回复TA
@若民笙歌 这个1000位数不能直接用int存吗?
freshman 5年前 回复TA
int sum则sum<2147483647。输入大的话会溢出。所以这里sum应该用double定义会更好。如果真是这样的话这题的难点在于取余。因为 [int]%[int]是合法的,[double]%[int]是不合法的。
小白来了 5年前 回复TA
@若民笙歌 对的?你的1000位数怎么存?
11223344 5年前 回复TA
n在十进制下不超过1000位,而单纯的一个六十四位的无符号整形型最大是 2^64-1是 18,446,744,073,709,511,615 也才20位,远远不够1000位
若民笙歌 5年前 回复TA
对的

#include<stdio.h>
int main()
{
	int a,b,c=1,i,i1,m,n,k,sum=0,n1=1,m1=1,nm=1,ii=1,ni=1;
	scanf("%d %d %d",&n,&m,&k);
	
	for (i=0;i<=n;i++)
	{
		c=1,n1=1,m1=1,nm=1,ii=1,ni=1;
		for(i1=1;i1<=n;i1++)
		{
			n1=n1*i1;
		}
			for(i1=1;i1<=m;i1++)
		{
			m1=m1*i1;
		}
			for(i1=1;i1<=n-m;i1++)
		{
			nm=nm*i1;
		}
		b=n1/m1/nm;
		
			for(i1=1;i1<=i;i1++)
		{
			ii=ii*i1;
		}
			for(i1=1;i1<=n-i;i1++)
		{
			ni=ni*i1;
		}
		a=n1/ii/ni;
		
		for (i1=1;i1<=k;i1++)
		{
			c=c*i;
		}
	
		sum=sum+a*b*c;
	}
	    printf("%d",sum);
	
	return 0;
	
}
咖啡 6年前 回复TA
要发 就发对