L1-008. 求整数段和
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
杨起帆
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式:
输入在一行中给出2个整数A和B,其中-100<=A<=B<=100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中输出全部数字的和。
输入样例:-3 8输出样例:
-3 -2 -1 0 1 2 3 4 5 6 7 8 Sum = 30
思路:
首先来判断输入的两个数字之间一共有多少个数字,如果不够一行的话,久到最后一个数字就打印回车符,如果能够整行内就可以输出的话,那么就直接控制回车符就好了,如果不能够整行内输出的话,那么就要控制最后一行数字的输出,数字的行数就正好等于两数字之和+1再除以5,剩下的数字就是要最后一行一起输出的数字。
这种做法可能比较麻烦,希望会有更简便的做法吧!
本人脑子笨,见谅。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
int sab=0;
int sum=0;
int i,j,k=1,l,m;
cin>>a>>b;
sab=b-a+1;
if(sab<5){
for(i=a;i<=b;i++){
sum=sum+i;
if(i!=b){
printf("%5d",i);//%5d用来控制右对齐输出的 这是需要注意的地方 细节问题往往最容易被忽略
}else{
printf("%5d\n",i);
}
}
}else{
if(sab%5==0){
for(i=a;i<=b;i++){
sum=sum+i;
if(k%5==0){
k=1;
printf("%5d\n",i);
}else{
printf("%5d",i);
k++;
}
}
}else{
l=sab/5;
for(i=a;i<=b;i++){
sum=sum+i;
if(k%5==0){
k=1;
printf("%5d\n",i);
l--;
if(l<=0){
m=i;
break;
}
}else{
printf("%5d",i);
k++;
}
}
for(int p=m+1;p<=b;p++){
sum=sum+p;
if(p!=b){
printf("%5d",p);
}else{
printf("%5d\n",p);
}
}
}
}
cout<<"Sum = "<<sum<<endl;
}