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;
}
这题好别扭,既有上边界也有下边界,提交了十多次才把边界搞清楚。