PAT甲级 1001

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

Each input file contains one test case. Each case contains a pair of integers a and b where -1000000 <= a, b <= 1000000. The numbers are separated by a space.

Output

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

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


int main() {
	vector<int> v;
	int a, b;

	cin >> a >> b;
	
	int sum = a + b;
	//考虑和为0的情况
	if(sum == 0){
		v.push_back(0);
	}
	//从个位 到 高位 放进vector
	while (sum) {
		v.push_back(sum % 10);
		sum /= 10;
	}
	//得到和的 位数
    int len = v.size();
    //因为vector中第一个元素为 个位,所以最后一个即为 最高位
	for (int i = len - 1; i >= 0; i--) {
	//只有最高位 才有正负之分
		if(i == len - 1){
			cout << v[i];
		}
		else{
			cout << abs(v[i]); 
		}
        // 让下标对3取余等于0的时候 此时说明后面的数字个数 一定是3的倍数
        // 此题是 从低位开始 以三个数字 为一组  =)但是题目并没有给足够的样例,就很奇怪,标准形式说的不明不白,也或许我英语垃圾把 =)
		if (i % 3 == 0 && i != 0) {
			cout << ",";
		}
	}
	cout << endl;
	return 0;
}

/* 下面代码是参考了别人的,但实则相似*/
#include <iostream> 
#include <vector>
using namespace std;
 
// 1001 A+B Format (20)(20 分)
int main(void){
    int a,b,sum;
    cin>>a>>b;
    sum = a+b;
    //不同的是 这里当和是负数的时候,直接输出一个"-"号,再将其取正
    if(sum<0){
        cout<<"-";
        sum = -sum;
    }
     
    vector<int> v;

    if(sum==0){
        v.push_back(0);
    }
 
    while(sum!=0){
        v.push_back(sum % 10);
        sum /= 10;
    }
     
    for(int i=v.size() - 1;i>=0;--i){
        cout<<v[i];
        if(i>0 && i%3==0){
            cout<<",";
        }
    } 
    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;
        //len % 3 == 0 说明位数刚好是3的倍数 每组都是3位数
        //当余 1 或者 2的时候,说明最高位附属的 那一组只有1或2位
        //为什么是i+1呢?暂可以理解为,逗号的位置只能是在当前位数后面放
        if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ",";
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值