1. 题目描述:
给定两个整数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
2. 解题思路
这个题目不难,写个for循环遍历从A到B之间的数字并相加计算和就可以,难点是使每个数字占5个字符宽度并向右对齐,Java语言沿用了C语言的printf语法,可以使用System.out.printf()方法打印字符串,其用法与C语言中类似, 这里是输出整数,所以用%d占位,题目要求每个数字占5的字符宽度,所以是%5d,且这个方法默认就是向右对齐输出
3. 代码示例:
import java.util.Scanner;
public class 求证数段的和 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//输入a和b
int a = sc.nextInt();
int b = sc.nextInt();
//计算总和
int sum = 0;
//计算数字的个数
int j = 0;
for (int i = a; i <= b; i++) {
System.out.printf("%5d", i);
j++;
sum += i;
if(j % 5 == 0 ){
System.out.println();
}
}
//如果数字的个数正好是5的倍数,则输出Sum = sum就不需要换行,否则就需要换行
if(j % 5 == 0){
System.out.println("Sum = " + sum);
}else{
System.out.println("\nSum = " + sum);
}
}
}
最后有个小细节,没有处理好会有一个测试点通不过,就是假如数字的个数正好是5的倍数,退出循环之前就已经换行了,最后输出Sum = sum时就不需要换行了,而如果不是5的倍数,退出循环的时候没有换行,这时最后输出Sum = sum的时候就需要换行,如下就是这两个的区别
-3 -2 -1 0 1 Sum = -5
-3 -2 -1 0 1 Sum = -5
4. 拓展:
对字符串进行以左对齐:
- 以左对齐: 只要在%添加一个'-'就行
System.out.printf("%-5d", i);
输出:
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30