PAT 甲级 1001 A+B Format (20 分)

题目:PAT 甲级 1001 A+B Format (20 分)

经验总结:
两数之和的结果有三种可能:正数、0、负数。特别要注意0的情况,不要忽视了。

解法一(数字转字符串处理):首先将数字结果转换成字符串,判断是否是负数,是负数就先把负号输出,然后去掉负号再对剩下的数字做判断。如果要输出逗号,那么这个逗号的前面必须且至少有个数字。所以可以遍历字符串,输出当前字符后,判断从当前字符开始到结尾的长度是否满足%3==1,既满足输出逗号前必须有且至少有个数字的特点。但注意当输出最后一个字符时不能输出逗号。

C++代码(数字转字符串处理):

#include<bits/stdc++.h>
using namespace std;
int main() {
	int a,b;
	cin>>a>>b;
	string s(to_string(a+b));
	if('-' == s[0]){ //如果是负数
		cout<<"-"; //先输出负号
		s=s.substr(1); //去掉负号再进一步处理
	}
	if(s.size()<4) {
		cout<<s;
	} else {
		for(int i=0; i<s.size(); i++) {
			cout<<s[i];
			if(1 == (s.size()-i)%3 && i!=s.size()-1){ //注意最后一个字符输出后不能加逗号
				cout<<",";
			}
		}
	}
	return 0;
}

解法二(将数字和逗号放入栈中):首先判断是否是负数,是负数先输出负号,然后负数乘以负一转换成正数再做进一步处理。将数字一位一位的放入栈中,在放入栈中之前判断是否需要放入逗号,判断的原理和解法一相同。放入数字之前先计数,当计数大于3且%3==1的时候就可以放入逗号了,比如在放入倒数第四个数字时满足放入逗号的条件,就先放入逗号再放入数字。特别要注意此解法要单独特殊对待两数之和为0的情况,因为不像字符串处理,结果为0也可以转换成字符串后输出。

C++代码(将数字和逗号放入栈中):

#include<bits/stdc++.h>
using namespace std;
int main() {
	int a,b,cnt = 0;
	cin>>a>>b;
	int sum = a+b;
	stack<char> s;
	if(sum<0) {
		cout<<"-";
		sum *= -1;
	}else if(0==sum){ //要注意之和为0的情况
		cout<<0;
	}
	while(sum) {
		cnt++; //先计数,判断在放入当前数字之前是否应该先放入逗号
		if(cnt>3 && 1==cnt%3) s.push(',');
		s.push(sum%10+'0');
		sum/=10;
	}
	while(!s.empty()) {
		cout<<s.top();
		s.pop();
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值