题目大意:
给出两个整数a,b,求a+b的值,并按照每三位用一个逗号分隔分形式输出。
算法思路:
这里给出2种解题思路,第一种是通用的解法,对于任意整数都适用。第二种是利用此题的数据范围来解题。
第一种方法:
首先计算a+b的值c,对于负数先输出负号,然后对结果取绝对值,使用string r存储最后输出的结果,将c的每一位逆序添加到r中,并且每添加3位就添加一个逗号(使用index来标记添加位数),这里得特判c==0的情况,直接输出0,最后将r逆序输出即可。
第二种方法:
仔细分析下就可以知道,最大结果为-2$\times$106和2$\times$106,也就是最多只有7位数字部分,那么最多就2个地方可能需要添加逗号如:1,000,000首先将数字c取绝对值然后转化为string类型,用string s保存,然后将s逆置,判断是否有7位,如果abs(c)>999999的话,就说明得添加2个逗号,如果abs(c)>999的话说明添加1个逗号,否则不添加,每隔三位添加一个逗号 。
提交结果:
第一次测试:测试点4错误,原因在于没有判断a+b等于0的情况
AC代码:
第一种方法:
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int c = a+b;
if(c<0){
printf("-");
c = -c;
}
if (c==0){
printf("0");
return 0;
}
string r;
int index = 0;
while (c!=0){
if(index%3==0&&index!=0){
// 这里得排除初始index=0的情况
r += ",";
}
r += to_string(c%10);
c /= 10;
++index;
}
reverse(r.begin(),r.end());
printf("%s",r.c_str());
return 0;
}
第二种方法:
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
int c = a+b;
int d = abs(c);
string s = to_string(d);
string result = "";
if(c<0) cout<<"-";
reverse(s.begin(),s.end());
if(d>999999){
result += s.substr(0,3)+","+s.substr(3,3)+","+s.substr(6);
}else if(d>999){
result += s.substr(0,3)+","+s.substr(3);
}else{
result += s;
}
reverse(result.begin(),result.end());
cout<<result;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。