PAT甲级1001 A+B Format (20分)(题目及测试点分析)

Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).

Input Specification:
Each input file contains one test case. Each case contains a pair of integers a and b where −106≤a,b≤106 . The numbers are separated by a space.

Output Specification:
For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.

Sample Input:

-1000000 9

Sample Output:

-999,991

分析:题目的意思很好理解,应该学过英语并且有过编程经历的人都能理解。。。输入两个数a和b,绝对值均不超过10的6次方,二者相加求和,每3位一组,以逗号分隔。当和是负数时,输出负号,当和的位数少于4位时,即length<=3,不用分隔符,直接输出即可。如果不是,则要考虑什么时候加逗号,写的很快,写完了,刚开始提交就6分我记得,是因为条件判断错了,后边一直是14分(菜逼已经挑不出什么错了)。气急败坏,去看了其他人的代码,没有我想要的,终于我发现了:是从后往前每3位分隔,而我却是从前往后(此刻很想。。。不,还是要淡定)也许这就是剩下的几个测试点没过的原因吧,12个测试点,懒得去逐个分析了。这给的样例也是够特殊的,从前往后,从后往前都对。看了评论,我发现是我自己傻了。。怨不得别人,一拍脑门子想了想现实生活中就是从后往前(捂脸)
#include 
#include 
using namespace std;
int main(){
    int a,b;
    cin >> a >> b;
    int sum = a+b;
    if(sum<0){
        cout << "-";
        sum = -sum;
    }
    string s = to_string(sum);
    if(s.length()<=3)
        cout << s;
    else{
        int count = s.length();
        for(int i = 0;i<s.length();i++){
        /*不能只是对3取余为0就可以了,就按样例来说,位数是6,满足%运算为0,但显然
        此时不能输出“,”所以第一位不能输出分隔符,同理当到达末尾时,
        最后一个也是不需要的。
        */
            if(count%3==0&&count!=s.length()&&i!=s.length()-1){
                cout << ",";
            }
            cout << s[i];
            count--;
        }
    }
    return 0;
}

PAT甲级1001 A+B Format (20分)(题目及测试点分析)_第1张图片

你可能感兴趣的:(PAT甲级)