weixin_44019404 2018-12-27 16:27 采纳率: 66.7%
浏览 311
已采纳

HUD 1465 想请问一下为什么这两个代码一个能过一个不能过

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a;

        long *p=(long *)malloc(20*sizeof(long));
        if(p==NULL) return 0;
        p[1]=0;
        p[2]=1;
        int i;
        for(i=3;i<=20;i++)
        {
            p[i]=(i-1)*(p[i-1]+p[i-2]);
        }
        while(scanf("%d",&a)!=-1)
            {printf("%lld\n",p[a]);
            }
        free(p);

    return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 20
long long  p[max];
int main()
{
        int n;
        p[1]=0;
        p[2]=1;
        p[3]=2;
        int i;
        for(i=4;i<=20;i++)
        {
            p[i]=(i-1)*(p[i-1]+p[i-2]);
        }
        while(scanf("%d",&n)!=EOF)
            {printf("%lld\n",p[n]);
            }


    return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
        int a;
        long long *p=(long long *)malloc(sizeof(long long)*20);
        p[1]=0;
        p[2]=1;
        int i;
        for(i=3;i<=20;i++)
        {
            p[i]=(i-1)*(p[i-1]+p[i-2]);
        }
        while(scanf("%d",&a)!=EOF)
            {printf("%l64d\n",p[a]);
            }
        free(p);

    return 0;
}
  • 写回答

1条回答 默认 最新

  • _ZGq 2018-12-27 12:00
    关注

    只看代码的情况下,能找出两处根本的不同:
    1. 第一份代码的数据类型为long,第二份代码的数据类型为long long,一般来说long的数据范围是2^31-1,long long的数据范围是2^63-1,数据范围不同。
    2. while循环条件中scanf的返回值不可能是-1,要把-1改为0或EOF。

    是第二份过了吧?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动