摘要:本文是PTA编程题"求整数段和"的题解,涵盖题目描述、输入输出格式及C++语言实现,展示for循环遍历、累加求和与格式化输出方法。
题目描述
给定两个整数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解题思路
核心问题分析
本题是一个典型的循环遍历与累加求和问题。需要完成三个核心任务:
- 顺序遍历输出:从整数A到整数B(包含A和B)依次输出每个整数
- 格式化排版:每个数字占5字符宽度、右对齐,每5个数字换一行
- 累加求和:计算区间内所有整数的总和,按指定格式输出
算法原理说明
使用for循环结构实现区间遍历,结合计数器与累加器实现格式化和求和:
- 读取区间端点A和B
- 使用for循环从i=A遍历到i=B:
- 使用setw(5)设置输出宽度为5个字符,右对齐输出当前i
- 将当前i累加到sum总和中
- 计数器count加1,每满5个输出一个换行
- 循环结束后,若最后一行不足5个数字,补一个换行符
- 按"Sum = X"格式输出总和
具体计算步骤
- 输入整数A和B(保证A ≤ B)
- 初始化:sum=0(总和),count=0(计数器)
- 循环变量i从A到B:
- 输出 setw(5) << i(5字符宽右对齐)
- sum = sum + i(累加)
- count = count + 1(计数)
- 若 count % 5 == 0:输出换行(每行5个)
- 循环结束后,若 count % 5 != 0:补一个换行(保证最后一行完整)
- 输出 "Sum = " << sum << endl
验证样例:
- 输入A=-3,B=8
- 遍历序列:-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8(共12个数)
- 格式化输出:
- 第1行(1-5个):-3 -2 -1 0 1
- 第2行(6-10个):2 3 4 5 6
- 第3行(11-12个):7 8
- 求和:-3-2-1+0+1+2+3+4+5+6+7+8 = (-6)+(1+2+3+4+5+6+7+8) = -6+36 = 30 ✓
代码部分实现
#include<iostream>#include<iomanip>usingnamespacestd;intmain(void){intA,B,i,sum=0,count=0;cin>>A>>B;for(i=A;i<=B;i++){cout<<setw(5)<<i;sum+=i;count++;if(count%5==0){cout<<endl;}}if(count%5!=0){cout<<endl;}cout<<"Sum = "<<sum<<endl;return0;}代码流程说明
头文件引入与命名空间声明
#include <iostream>:引入标准输入输出流头文件#include <iomanip>:引入输入输出格式控制头文件,提供setw()等格式化函数using namespace std;:使用std命名空间
主函数入口
int main(void):程序主函数入口
变量定义与初始化
int A, B:存储区间端点A(起始整数)和B(结束整数)int i:for循环的遍历变量int sum = 0:累加器,存储所有整数的总和,初始值为0int count = 0:计数器,统计已输出的整数个数,初始值为0
数据输入
cin >> A >> B;:读取两个整数A和B
for循环遍历与处理
for (i = A; i <= B; i++):- 初始化:i = A(从起始整数开始)
- 循环条件:i <= B(直到超过结束整数停止)
- 更新:i++(每次加1)
- 循环体内操作:
cout << setw(5) << i;:设置输出宽度为5个字符,右对齐输出当前整数i- setw(5)只对紧接着的一个输出有效,默认右对齐
sum += i;:将当前i累加到sum中(sum = sum + i)count++;:计数器count加1if (count % 5 == 0):判断是否已输出5个整数cout << endl;:每满5个输出换行符
补充最后一行换行
if (count % 5 != 0):如果最后一行不足5个数字(即总数不是5的倍数)cout << endl;:补一个换行符,确保最后一行结束后换行
输出总和
cout << "Sum = " << sum << endl;:按指定格式输出所有整数的总和
程序结束
return 0;:返回0,程序正常退出