题意:
输入两个整数,可正可负,然后根据题目要求对其和进行格式化。具体格式化要求就是每三位需要用一个 , 隔开.
初步思路:
先求得两个数的和记为c, 记录c是否为负数, 然后定义一个字符串str, 然后循环对c进行对10取余操作,直到c==0。注意,在循环中需要用一个i记录当前取余到了第几位,便于插入 ‘,’ .
代码实现:
#include<iostream>
#include <string>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b;
c=a+b;
if(c==0)
{
cout<<0;
}
bool isNeg=c<0; //记录结果是否为负数
c=abs(c);
int i=0;
string str;
while(c>0)
{
if(i!=0&&i%3==0)
{
str=','+str;
}
str=to_string(c%10)+str;
c/=10;
++i;
}
if(isNeg)
{
str='-'+str;
}
cout<<str;
return 0;
}
虽然以上代码逻辑比较直接,但是代码看起来很臃肿. 其实在刷题就是了为提高代码质量和逻辑的。所以Google了一下,发现不仅我的代码臃肿,逻辑也很臃肿。
- 既然最后结果是转化为字符串输出的,为什么不一开始就把a+b的结果初始化为字符串呢?然后只需再插入 ‘,’ 即可。
代码改进
#include<iostream>
#include <string>
using namespace std;
int _1001()
{
int a,b;
cin>>a>>b;
string str=to_string(a+b);
int len=str.length();
for(int i=0;i<len;++i)
{
cout<<str[i];
if(str[i]=='-')continue;
if(i!=len-1&&(i + 1) % 3 == len % 3)cout<<',';
}
return 0;
}
以上代码参考自https://www.liuchuo.net/archives/1888