PAT甲级–1001
代码
#include<iostream>
using namespace std;
int main()
{
int a,b,sum;
char sum2[10];
int i=0;
bool fu=0;
cin>>a>>b;
sum=a+b;
if(sum==0)
cout<<'0';
//千万要注意将负的变成正的
if(sum<0)
{
fu=1;
sum=-sum;
}
while(sum)
{
sum2[i]=sum%10+'0';
sum=sum/10;
i++;
if((i+1)%4==0)
{
sum2[i]=',';
i++;
}
}
if(fu==1)
cout<<'-';
//从后往前遍历
for(int j=i-1;j>=0;j--)
{
if(j==i-1&&(i%4==0))
continue;
else
cout<<sum2[j];
}
return 0;
}
问题
没有注意到可能sum为0的情况
代码改进
除了第一位是负号的情况,只要当前位的下标i满足(i + 1) % 3 == len % 3并且i不是最后一位,就在逐位输出的时候在该位输出后的后面加上一个逗号
将数字转化成字符串:
string s = to_string(a + b);
获取字符串长度
int len = s.length();
这里不用考虑跳过负号,因为负号所在的位置已经被跳过了,不会在其后出现逗号,而其他位置直接取模剩余的余数就是要放逗号的位置。