解题思路其实我是错误答案,我只想问问哪错了,在低数值的情况下可以算出正确答案
注意事项:不明白
参考代码:
#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;
}
0.0分
8 人评分
#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; } 可以运行出来,但是提交说运行错误,怎么解决,哪里有问题?求大佬告知
int sum则sum<2147483647。输入大的话会溢出。所以这里sum应该用double定义会更好。如果真是这样的话这题的难点在于取余。因为 [int]%[int]是合法的,[double]%[int]是不合法的。
n在十进制下不超过1000位,而单纯的一个六十四位的无符号整形型最大是 2^64-1是 18,446,744,073,709,511,615 也才20位,远远不够1000位
对的 #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; }
C语言程序设计教程(第三版)课后习题8.9 (Java代码)浏览:1336 |
【蟠桃记】 (C语言代码)浏览:651 |
字符串问题 (C语言代码)浏览:1521 |
数组输出 (C语言代码)--此题的题目描述有问题浏览:1817 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:638 |
蛇行矩阵 (C语言代码)浏览:753 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:880 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:561 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:531 |
P1000 (C语言代码)浏览:877 |