c - 我的代码有什么问题,为什么它不能从 c 中的 function 返回 long long int value

#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;
}

相似文章

html - 如何将可滚动内容与标题居中?

我正在尝试集中一些内容。内容大于父级,因此需要滚动。顶部还有一个标题。出于某种原因,滚动高度会剪切可滚动内容。关于我应该如何解决这个问题的想法?这是小提琴:https://jsfiddle.net/x...