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 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失