谷莠子905 2024-06-02 11:08 采纳率: 0%
浏览 3

超级疑惑无敌特别疑惑诶!

PAT甲级第一题疑惑!
题目链接:
https://pintia.cn/problem-sets/994805342720868352/exam/problems/type/7?problemSetProblemId=994805528788582400&page=0

原题如下:

img


[文件]
我写了三个程序但只有第一个代码是可以 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;
}

请指点迷津!!帮忙指出后面这两个错误代码的错误点在哪里。



  • 写回答

3条回答 默认 最新

  • 关注

    上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    问题1: 错误代码1的问题在于判断是否需要添加逗号的逻辑有误。在字符串ans的最开始添加了一个字符后,cnt已经不是正确的字符计数了,因此不能准确判断是否为第三个字符。另外,ans[0]的判断也有问题,应为ans[cnt-1]。

    解决方案:

    1. 更改判断是否需要添加逗号的条件,应将 ans[0] 修改为 ans[cnt-1]
    2. 修改逗号的添加条件的判断,将 cnt%3 == 0 && cnt != len 修改为 cnt%3 == 0 && i != len - 1

    修改后的代码如下:

    #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[cnt-1] == '-'){
                if(cnt != 0 && cnt%3 == 0 && i != len-1){
                    ans += ',';
                }
            }else{
                if(cnt%3 == 0 && i != len-1){
                    ans += ',';
                }
            }
            
        }
        cout << ans << endl;
    
        return 0;
    }
    

    问题2: 错误代码2的问题在于没有进行字符串反转操作,而需要输出的结果是按照从高位到低位的顺序输出的。

    解决方案:

    1. 增加一个新的字符串用于存储反转后的结果。
    2. 在添加字符时,将字符添加到新的字符串的开头。

    修改后的代码如下:

    #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;
        string result;
        for(int i=0; i<len; i++){
            result = str[i] + result;
            cnt++;
            if(cnt%3 == 0 && i != len-1){
                result = ',' + result;
            }
        }
        cout << result << endl;
    
        return 0;
    }
    

    希望对你有帮助!

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月2日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真