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。

    是第二份过了吧?

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

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮