题目贴图
题目大意
以a b的形式输入待求和两数:a b
求和完毕后从末尾至首位每三位用 ‘.’ 符号割开实现格式化输出。
重点这里a,b范围是-1000000~1000000
解决思路
首先是对输入两数的求和,接着通过void format_print(int a,char sep)
函数进行输出格式的转换,输入参数中的a为待格式化的和,sep为分隔符。
在这个函数中,首先判断首位是否为负号 ‘-’ ,如果是的话直接输出负号并取绝对值,接着通过to_string
函数将数值转换为字符串,方便后续处理。
接着对结果长度<4即不需要输出分割符的情况进行特判,之后从首位至末位正向遍历这个字符串,并通过找规律发现在下标i满足(len-4-i)%3==0&&(len-4-i)>=0
的这位输出分割符即可。
关于找规律的过程,可以以和为1000、10000、100000、1000000等数为例,列出i、len以及输出分隔符下标这三属性间的关系表,仔细观察就可以发现。
AC代码
#include<bits/stdc++.h>
using namespace std;
void format_print(int a,char sep)
{
if(a<0)
{
cout<<'-';
a=abs(a);
}
string sum = to_string(a);
int len = sum.length();
if(len<4)
{
cout<<sum<<endl;
return;
}
else
{
for(int i=0;i<len;i++)
{
cout<<sum[i];
if((len-4-i)%3==0&&(len-4-i)>=0)
cout<<sep;
}
cout<<endl;
}
}
int main()
{
int a,b,sum;
cin>>a>>b;
sum=a+b;
format_print(sum,',');
}