PTA L1-008 求整数段和 (10分)

题目描述:

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:

输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

输出格式:

首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X

输入样例:

-3 8

输出样例:

   -3   -2   -1    0    1
    2    3    4    5    6
    7    8
Sum = 30

解题报告:

1:这题我的代码可读性不太好,但题目是能过的=.=

2:这里说下%5d是每个数字占5个字符,向右对齐。 %-5d是每个数字占5个字符,向左对齐

3:控制换行我是通过5n+s这个通项公式来的,s代表题目的A。当(i-s)%5==0说明前面有5个数字了,要换行。当然第一个数字要跳过,所以还要加一个i!=s这个条件,注意这样判断是在输出数字前判断,具体请看代码。其实也可以拿每一行的最后一个来构成序列,好像更简单,判断条件更少=.=。这里就不过多赘述了。

4:最后计算和直接套用等差数列求和公式。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll s, e;
    scanf("%lld%lld", &s, &e);
    for(ll i=s; i<=e; ++i)
        printf("%s%5lld", (i-s)%5==0&&i!=s ? "\n" : "", i);
    printf("\nSum = %lld\n", (s+e)*(e-s+1)/2);
    return 0;
}
发布了109 篇原创文章 · 获赞 2 · 访问量 4590

猜你喜欢

转载自blog.csdn.net/jun_____/article/details/103975038