PAT甲级第一题疑惑!
题目链接:
https://pintia.cn/problem-sets/994805342720868352/exam/problems/type/7?problemSetProblemId=994805528788582400&page=0
原题如下:
[文件]
我写了三个程序但只有第一个代码是可以 AC ,其他代码都只能拿13-14分,不知自己代码哪里出了问题?
AC 代码如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int sum = a + b;
// 负数转整数
if(sum<0){
cout << "-";
sum = -sum;
}
string result;
// 数字变成字符串
string numStr = std::to_string(sum);
int len = numStr.length();
//计数是第几个字符了
int cnt = 0;
for (int i = len - 1; i >= 0; i--) {
result += numStr[i];
cnt++;
//如果计数到是 3 的倍数个的字符且不是最后一个字符,则在其后面添加一个 “逗号” 分隔开
if (cnt%3 == 0 && i!=0) {
result += ',';
}
}
// 反转字符串
reverse(result.begin(), result.end());
cout << result << endl;
return 0;
}
其他错误代码如下:
错误代码 1:
```c++
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int sum = a + b;
string str = to_string(sum);
int len = str.length();
int cnt =0;
string ans;
for(int i=0; i<len; i++){
ans += str[i];
cnt++;
if(str[i] == '-'){
cnt--;
}
if(ans[0] == '-'){
if(cnt != 0 && cnt%3 == 0 && cnt != len-1){
ans += ',';
}
}else{
if(cnt%3 == 0 && cnt != len){
ans += ',';
}
}
}
cout << ans << endl;
return 0;
}
错误代码 2:
```c++
#include<bits/stdc++.h>
using namespace std;
int main(){
int a , b;
cin >> a >> b;
int sum = a + b;
if(sum<0){
cout << '-';
sum = -sum;
}
string str = to_string(sum);
int len = str.length();
int cnt = 0;
for(int i=0; i<len; i++){
cout << str[i];
cnt++;
if(cnt%3 == 0 && cnt != len){
cout << ',';
}
}
cout << endl;
return 0;
}
请指点迷津!!帮忙指出后面这两个错误代码的错误点在哪里。