写在前面
最近闲的无事,于是玩玩PAT,玩玩算法,然后现在一直在搞java,所以想先搞搞C++,之前有一些C的基础,C++也只是了解过一下,哈哈,边玩边学吧。
题目简介
这道题是最开始的第一题,然后题目也很简单,分两点:
- 输入a,b两个整数 ,然后两个数的范围是−106≤ a,b ≤106,所以这里不需要考虑变量的长度范围。
- 然后输出结构的时候每隔3个数字用逗号分隔。
主要思路
- 计算出a+b的值
- 用to_string函数将整数转成字符串,然后进行字符串处理,这里我的思路是如果是"-“字符的话就不进行后面的判断,否则就判断当前的数字是第几个数字(从右边开始数),如果模3余1并且个数大于3的话,就在该字符后面加个”,"符号。
我的代码
#include <iostream>
using namespace std;
int main() {
int a,b;
cin >> a >> b;
string s = to_string(a + b);
int length = s.length();
for(int i = 0 ;i < length ;i ++){
cout << s[i];
if(s[i] == '-') continue;
//如果当前的数字的位置模3 == 1 并且 当前位置大于3的话
if( (length -i ) % 3 == 1 && length - i > 3) cout << ',';
}
return 0;
}
#### 其他思路
这里完成了之后去看了一下github上一个大佬的解法 —>传送门
感觉到很新颖,这里分享一下,首先第一部都是计算两数之和,重要的是用逗号分隔的思路。
#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;
}
这里的思路给我耳目一新的感觉,不过和我的算是一样,只不过我的是从右边开始,他的是从左边开始,思路是:
- 首先也是先看这是第几个数字,如果当前数字的位置刚好等于总数字个数模3余下的个数的话,就加分隔符。
- 还有一个需要满足的是,当前的个数不能小于4,这里用" i != len -1 "限制,因为当len < 4的时候,这个条件就不满足了,如果不理解可以在纸上枚举一下就知道了。
最后
有什么问题可以在评论区一起探讨。