PAT_甲级_1001 A+B Format

题目大意:

给出两个整数a,b,求a+b的值,并按照每三位用一个逗号分隔分形式输出。

算法思路:

这里给出2种解题思路,第一种是通用的解法,对于任意整数都适用。第二种是利用此题的数据范围来解题。

第一种方法:

首先计算a+b的值c,对于负数先输出负号,然后对结果取绝对值,使用string r存储最后输出的结果,将c的每一位逆序添加到r中,并且每添加3位就添加一个逗号(使用index来标记添加位数),这里得特判c==0的情况,直接输出0,最后将r逆序输出即可。

第二种方法:

仔细分析下就可以知道,最大结果为-210^6和210^6,也就是最多只有7位数字部分,那么最多就2个地方可能需要添加逗号如:1,000,000首先将数字c取绝对值然后转化为string类型,用string s保存,然后将s逆置,判断是否有7位,如果abs(c)>999999的话,就说明得添加2个逗号,如果abs(c)>999的话说明添加1个逗号,否则不添加,每隔三位添加一个逗号 。

提交结果:
第一次测试:测试点4错误,原因在于没有判断a+b等于0的情况

PAT_甲级_1001 A+B Format_第1张图片

AC代码:
第一种方法:
#include 
#include 
#include 

using namespace std;

int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    int c = a+b;
    if(c<0){
        printf("-");
        c = -c;
    }
    if (c==0){
        printf("0");
        return 0;
    }
    string r;
    int index = 0;
    while (c!=0){
        if(index%3==0&&index!=0){
            // 这里得排除初始index=0的情况
            r += ",";
        }
        r += to_string(c%10);
        c /= 10;
        ++index;
    }
    reverse(r.begin(),r.end());
    printf("%s",r.c_str());
    return 0;
}
第二种方法:
#include
#include
#include

using namespace std;

int main(){
    int a,b;
    cin>>a>>b;
    int c = a+b;
    int d = abs(c);
    string s = to_string(d);
    string result = "";
    if(c<0) cout<<"-";
    reverse(s.begin(),s.end());
    if(d>999999){
        result += s.substr(0,3)+","+s.substr(3,3)+","+s.substr(6); 
    }else if(d>999){
        result += s.substr(0,3)+","+s.substr(3); 
    }else{
        result += s;
    }
    reverse(result.begin(),result.end());
    cout<

你可能感兴趣的:(算法-数据结构,c++)