PAT甲级刷题笔记(C++)
Hello!朋友们俺也来写博客啦~
最近在开始刷PAT的甲级真题,欢迎大噶一起来讨论还有互相监督刷题吖~后面也会陆续更新更多题目的刷题思路和完整代码!让我们冲冲冲吖!
- 写在前面:夏天来一杯清凉的 mojito~ 清爽刷题!
1001 A+B Format(格式控制输出)
(1)题目
- 英语原题
(2)代码和注释
- 实现方式①——
数值解法
//【 缺陷:多了不必要的计算,可以多定义几个变量来存储中间计算结果】——5ms
//【经验:printf %03d,左补零操作】
//【思路2:转换为字符串后再操作】
/*解法一:纯算数*/
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int a, b, sum, tmp;
//printf("%d,%03d,%03d", c, d, tmp); 控制格式输出
int main()
{
cin>>a>>b;
sum=a+b;
// sum=-1020020; 欺骗输入,测试用途
if(abs(sum)<1000)
{
cout<<sum;
}
else if(abs(sum)>=1000000)
{
tmp=sum/1000000;
cout<<tmp<<",";
tmp=(sum%1000000)/1000;
printf("%03d",abs(tmp));
tmp=sum%1000;
// cout<<",";
printf(",%03d",abs(tmp));
}
else
{
tmp=sum/1000;
cout<<tmp<<",";
tmp=sum%1000;
printf("%03d",abs(tmp));
// cout<<abs(tmp);
}
return 0;
}
- 实现方式②——
字符串处理
/*解法2:字符串处理*/
//字符串处理的解法运行时间更长——23ms
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
string s = to_string(a + b);
int len = s.length();
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == '-') continue;
//挺巧妙的,考虑了负号存在的情况
if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ",";
// 若采用下式则当sum为负数时,则都会出错
// if ((i + 1) % 3 == 0 && i != len - 1) cout << ",";
}
return 0;
}
(3)参考的其他大哥的链接
- 写在后面:路漫漫,亦灿灿~