共计 1210 个字符,预计需要花费 4 分钟才能阅读完成。
题目粗心:
给出两个整数 a,b, 求 a + b 的值,并依照每三位用一个逗号分隔分模式输入。
算法思路:
这里给出 2 种解题思路,第一种是通用的解法,对于任意整数都实用。第二种是利用此题的数据范畴来解题。
第一种办法:
首先计算 a + b 的值 c,对于正数先输入负号,而后对后果取绝对值,应用 string r 存储最初输入的后果,将 c 的每一位逆序增加到 r 中,并且每增加 3 位就增加一个逗号 (应用 index 来标记增加位数),这里得特判 c == 0 的状况,间接输入 0,最初将 r 逆序输入即可。
第二种办法:
仔细分析下就能够晓得,最大后果为 -210^6 和 2 10^6,也就是最多只有 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;
}
正文完