PAT :计算机程序设计能力考试:一个高校编程学习赛,内容基础,据说题目描述含糊不清,造成诸多理解错误。
第一观感是:输入输出样例极少,未给学生充分理解题目,提供更多辅助。
PAT 甲级:英文题目,涉及基础数据结构。【
胡说
,涉及好多算法】
问题描述
Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).
计算 a+b 的和,结果按照以下格式输出:每三个数字使用一个 ,
分割(除非结果不足三位数)。
输入格式
Each input file contains one test case. Each case contains a pair of integers a and b where −106 ≤a,b≤10 6. The numbers are separated by a space.
一行输入,包含两个整数 a 和 b(−106 ≤a,b≤10 6),数字之间使用空格分割。
输出格式
For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.
按照指定格式输出 a 和 b 的和,仅一行。
输入输出样例
输入样例 | 输出样例 |
---|---|
-1000000 9 | -999,991 |
样例解释:无
题解 1
思路分析:若是和不足 4 位数,直接输出,否则取和的绝对值,按位拆分,每三个数字插入 ,
,而后输出时,注意负号和首字符为 ,
的情况。
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int n = a + b;
if(n < 1000 && n > -1000) {
cout << n << endl;
return 0;
}
bool f = n < 0; // 记录负号
n = abs(n); // 取和的绝对值
char chs[20];
int i = 0; // 记录 chs 字符数
int c = 1; // 记录数字个数
while(n) { // 将和按位拆分,每三个数字,拆入一个 ','
chs[i++] = n % 10;
if(c % 3 == 0) chs[i++] = ',';
n /= 10;
c ++;
}
// 还原负号
if(f) cout << '-';
// 注意数字位数是 3 的倍数时,首字符是 ',',不做输出
if(chs[i - 1] != ',') cout << int(chs[i - 1]);
for(int j = i - 2; j >= 0; j--) {
if(chs[j] == ',')
cout << chs[j];
else cout << int(chs[j]);
}
cout << endl;
return 0;
}