杭电oj2519

博客内容提到了在解决杭电oj2519题目时,使用long long类型无法通过,而改用double类型则可以解决问题,暗示可能涉及到浮点数四舍五入的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新生晚会

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17034    Accepted Submission(s): 5730


Problem Description
开学了,杭电又迎来了好多新生。ACMer想为新生准备一个节目。来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法?
 

Input
数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行。
每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30)
 

Output
每组数据输出一个整数,每个输出占一行
 

Sample Input

 
53 25 34 43 68 0
 

Sample Output

 
310101
 

Source
 
答案:

#include <stdio.h>


void main()
{
int n;
int a,b;
int i,j;
double sum1,sum2;//long long sum1,sum2;
scanf("%d",&n);
while(n--)
{
scanf("%d %d",&a,&b);
if(b==0)
printf("1\n");
else if(b>a)
printf("0\n");
else if(a==b)
printf("1\n");
else 
{
sum1=sum2=1;
for(i=a;i>a-b;i--)
{
sum1 = sum1 * i;
}
for(j=1;j<=b;j++)
{
sum2 = sum2 * j;
}
printf("%.0lf\n",sum1/sum2);//printf("%lld\n",sum1/sum2);
}
}

}

解析

用long long过不了

用double能过

据说是这种四舍五入的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值