【科大OJ】 Problem G:按顺序输出数字(II)

该博客主要讨论如何在C语言中处理整数序列的输出,特别是涉及边界条件和数据溢出的问题。内容包括对于正数、0和负数N的情况,如何从K开始输出指定数量的整数,并在输出过程中正确处理超出int类型范围的数据,避免溢出。博主通过实例代码解释了如何判断数据是否溢出,并分享了在多次尝试后理解边界条件的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

给定一个整数K以及N,如果N是正数,则输出自K开始的N个整数K,K+1,...,K+N-1。如果N是0,则没有输出。如果N是负数,则输出K以及K之前的-N-1个整数,即输出K+N+1,...,K-1,K。

但是,当输出的数据溢出时,不应输出溢出的数据。也就是说,如果包括K在内的N个数据中,部分数据超出了int类型的表示范围,则不应输出这些数据。

Input

两个整数K和N。

Output

根据题目描述输出数字或不产生输出。如果有2个或者2个数字输出,则两两之间用一个空格隔开。

Sample Input

10 6

Sample Output

10 11 12 13 14 15

HINT

应该如何判断数据的溢出呢?

Append Code

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()
{
    long long int k,n;
    scanf("%lld %lld",&k,&n);
    if(n>0)
    {
        for(int i=0,j=0;i<n;i++)
        {
            if(k+i<-2147483648);//如果k+i小于int范围则不输出
            else if(k+i>2147483647)break;//k+i大于int范围,n为正则后面都大于范围,都不输出
            else if(j==0)//判断是不是输出的第一个数字
            {
                printf("%d",(int)k+i);//j=0是第一个数字,j>0则不是
                ++j;
            }
            else printf(" %d",(int)k+i);//后面的正常输出,前面加个空格
        }
    }
    else if(n==0) return 0;//n=0的时候一个也不输出
    else
    {
        for(int i=n+1,j=0;i<=0;i++)//这里从k的前n项开始输出
        {
            if(k+i<-2147483648);//向下超界,因为是越来越大,所以不break
            else if(k+i>2147483647)break;
            else if(j==0)//判断是不是第一个输出的
            {
                ++j;
                printf("%d",(int)k+i);
            }
            else printf(" %d",(int)k+i);
        }
    }
    return 0;
}

这题好别扭,既有上边界也有下边界,提交了十多次才把边界搞清楚。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值