题目概述
- 输入 :一行三个整数
a b c
(空格分隔)。 - 输出 :一行,依次输出三数;每个数占 8 个字符宽度且右对齐 ,三个数之间一个空格。
- 数字超出 8 位时不截断,照常完整输出。
关键点
- 右对齐 + 固定最小宽度 8;不足在左侧补空格。
- 三个数之间仅放一个空格;行末不要多余空格。
- 下例中用
long long
覆盖范围更稳(当然用int
也可)。
方法一:<iomanip>
的 setw
(推荐)
cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
long long a[3];
cin >> a[0] >> a[1] >> a[2];
cout << setw(8) << a[0] << " "
<< setw(8) << a[1] << " "
<< setw(8) << a[2] << '\n';
return 0;
}
要点 :setw(8)
表示至少占 8 列,默认右对齐;宽度不足左侧补空格,超出不截断。
方法二:C 风格 printf
cpp
#include <cstdio>
int main() {
long long a[3];
if (scanf("%lld %lld %lld", &a[0], &a[1], &a[2]) == 3) {
// %8lld => 右对齐、宽度为 8
printf("%8lld %8lld %8lld\n", a[0], a[1], a[2]);
}
return 0;
}
要点 :%8lld
右对齐且宽度 8。
方法三:手工补空格(不依赖格式库)
cpp
#include <iostream>
#include <string>
using namespace std;
string rightPad8(long long x) {
string s = to_string(x);
int pad = 8 - (int)s.size();
if (pad < 0) pad = 0; // 超过 8 位不补
return string(pad, ' ') + s; // 左侧补空格
}
int main() {
long long a[3];
cin >> a[0] >> a[1] >> a[2];
cout << rightPad8(a[0]) << " "
<< rightPad8(a[1]) << " "
<< rightPad8(a[2]) << '\n';
return 0;
}
要点:把数字转字符串,计算需要补的空格数量并在左侧补齐。
方法四:ostream::width()
(流对象原生方法)
cpp
#include <iostream>
using namespace std;
int main() {
long long a[3];
cin >> a[0] >> a[1] >> a[2];
cout.width(8); cout << a[0] << " ";
cout.width(8); cout << a[1] << " ";
cout.width(8); cout << a[2] << '\n';
return 0;
}
要点 :width(8)
仅对下一次插入有效,需每次设置。
测试样例
输入
123456789 0 -1
输出
123456789 0 -1
编译与运行(Dev-C++ / g++)
- 直接把任一方法保存为
main.cpp
,在 Dev-C++ 中新建控制台项目编译运行即可。 - 命令行(可选):
bash
g++ -std=c++11 -O2 -pipe -o main main.cpp
./main