PAT_甲级_1001 A+B Format (C++)

目录

1,题目描述

2,思路

我的:

大神的:

3,测试过程

4,代码【C++】


1,题目描述

2,思路

我的:

先将两个数o求和得到sum,若sum为负数,先输出“-”,然后取绝对值;

sum%1000,sum/=1000,将其分成三位三位的数字,并存入out数组中;

从后向前遍历,按格式输出;(即: 栈)

大神的:

直接将a+b转换成字符串,根据特定的位置区分输出。。。

3,测试过程

  • 由于是字符串与数字交替输出,需注意先输出符号,再将sum取绝对值;
  • sum可能开始就为0,按照我的代码来看,需要提前判断一下,将其入栈,以免出现段错误(数组越界);
  • 0->000; 1->001; 10->010; 

4,代码【C++】

我的:

#include<iostream>
#include<string>
#include<vector>
#include<math.h>
using namespace std;

int main()
{
    int a, b, sum;
    cin>>a>>b;
    sum = a + b;
    vector<int> out;

    if(sum < 0) cout<<"-";
    sum = fabs(sum);    //取整数

    if(sum == 0) out.push_back(sum);//测试点4 段错误改正

    while(sum != 0){
        out.push_back(sum % 1000);
        sum /= 1000;
    }

    cout<<out[out.size() - 1];
    for(int i = out.size() - 2 ; i >= 0 ; i--){
        if(out[i] == 0) cout<<","<<"000";
        else if(out[i] < 10) cout<<","<<"00"<<out[i];
        else if(out[i] <100) cout<<","<<"0"<<out[i];
        else cout<<","<<out[i];
    }

    return 0;
}

 大神的:

#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 << ",";
    }
    return 0;
}
发布了45 篇原创文章 · 获赞 5 · 访问量 2202

猜你喜欢

转载自blog.csdn.net/qq_41528502/article/details/104169563