2020年2月4日,开始刷PAT的题,第一题就写了好久,总结起来需要考虑以下几个方面
- 特殊位置:划分点
- 临界值
- 0的处理
折腾的第一个版本
#include<iostream>
using namespace std;
int main() {
int a = 0, b = 0, c = 0, d = 0;
int t = 100;
int f = 0, p = 0;
cin >> a >> b;
c = a + b;
if (c < 0) {
c = 0 - c;
cout << "-";
}
if (c / 1000 != 0) {
d = c / 1000;
if (d >= 1000) {
d = d / 1000;
c = c % 1000000;
cout << d;
cout << ",";
f = 1;
}
p = c / 1000;
if (p > 100 || f == 0) cout << p;
else {
while (p / t == 0) {
cout << "0";
t = t / 10;
if (t == 1)break;
}
cout << p;
}
cout << ",";
c = c % 1000;
f = 1;
t = 100;
}
if (c > 100 || f == 0) cout << c;
else {
while (c / t == 0) {
cout << "0";
t = t / 10;
if (t == 1)break;
}
cout << c;
}
return 0;
}
优化了一个版本
#include<iostream>
using namespace std;
int main() {
int a=0,b=0,sum=0,d=0;
int t = 100;
int f = 0,p=1,q=0;
//输入
cin >> a >> b;
//求值
sum = a + b;
//输出正负号
if (sum < 0) {
sum = 0 - sum;
cout << "-";
}
//按照1000划分逗号,范围在0~2*10^6
while (true)
{
d = sum;
p = 1;
//去头,仅保存第一遍循环得到的p
while (d >=1000) {
d = d / 1000;
p = p * 1000;
}
if (p < q / 1000) p = q / 1000;
//判断是否需要补0
if (d > 100 || f == 0) cout << d;
else {
t =100;
while (d / t == 0) {
cout << "0";
t = t / 10;
if (t == 1)break;
}
cout << d;
}
//输出逗号,并用f标志前方是否有逗号
if (p == 1) break;
cout << ",";
f = 1;
//使用剩下的数继续循环
sum = sum % p;
q = p;
}
return 0;
}