#include<stdio.h>
int facsum(long long int f)
{
long long int sum=1,i;
if(f>0)
{
for(i=1;i<=f;i++)
{
sum*=i;
}
}
return sum;
}
int main()
{
long long int M,N;
while(scanf("%lld %lld",&M,&N)!=EOF)
{
long long int sum=facsum(M)+facsum(N);
printf("%lld\n",sum);
}
return 0;
}
此代码适用于 https://www.beecrowd.com.br/judge/en/problems/view/1161 这个问题,但我不知道为什么我的代码没有返回 long long int value。
回答1
您将 function 声明为返回 int
。如果您希望返回 value 为 long long int
,请这样声明:
long long int facsum(long long int f) // return type changed HERE
{
long long int sum=1;
long long int i;
if(f>0)
{
for(i=1;i<=f;i++)
{
sum*=i;
}
}
return sum;
}
很奇怪,您在 function 中使用了 sum
,而它只进行乘法运算。这使人们难以理解您的代码。
另外,请注意 long long int
通常是 64 位,并且适合的最大 value 约为 10^19。 20!大于这个。因此,任何 value 的 f
传递给大于 19 的 function 都将返回不正确的答案。
回答2
先生,在 while 循环中,您每次都在声明一个新变量:
long long int sum=facsum(M)+facsum(N); // must remove long long int
正如另一位用户提到的,返回类型也是一个问题,但主要问题是 sum
在 while 循环中重复声明
下面是一个工作版本,请注意我使用了另一个符号来让 printf
与 long long int 一起正常工作,我使用了 %I64d
,因为我在基于 Windows 的系统中。
#include<stdio.h>
long long int facsum(long long int f)
{
long long int sum=1,i;
if(f>0)
{
for(i=1;i<=f;i++)
{
sum*=i;
}
}
return sum;
}
int main()
{
long long int M,N, sum = 0;
while(scanf("%lld %lld",&M,&N) == 2) // if get warring or error try %I64d instead %lld
{
sum=facsum(M)+facsum(N); // remove long long int
printf("%lld\n",sum);
}
return 0;
}