1001. A+B Format
题目
解题过程
这道题的关键点就是想办法按三位取逗号的标准输出,也就是在格式上做了一点要求,思路很简单。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
/* Sum是A、B之和,tmp是中间变量,i用于循环 */
int A, B, Sum, tmp, i;
/* IsStart用于判断是否为首高位输出 */
bool IsStart;
cin>>A>>B;
Sum=A+B;
tmp=0;
IsStart=false;
if(Sum<0) /* 如果是负整数,先输出'-',再按正整数处理 */
{
cout<<'-';
Sum=abs(Sum);
}
else if(Sum==0) /* 如果为0,直接输出 */
{
cout<<Sum;
return 0;
}
for(i=1000000; i>=1; i/=1000) /* 从高位向低位处理 */
{
tmp=Sum/i;
if(tmp && !IsStart) /* tmp存在且IsStart还是初值,判断为首高位 */
{
cout<<tmp;
IsStart=true; /* 改值,说明首高位已输出 */
}
else if(!tmp && !IsStart) /* 判断为首高位之前的位数,不输出 */
continue;
else /* 首高位之后的数,tmp为0也要输出 */
{
cout<<','; /* 添加分号 */
printf("%03d", tmp); /* 强制输出3位数,前面空缺用0补全 */
}
Sum-=tmp*i;
}
return 0;
}
总结
一开始我想用字符数组解决这个问题,后来实在想不出来才改用这种方法。比之其他人的方式倒是没看出来优劣,可能我的代码更加长一点,所以也就不贴出来其他好的解题思路了。
这道题的对我这种思路的卡题点有三处:第一是能不能按照三位一个逗号的标准输出;第二是首高位前没有0补全输出,但是首高位后需要0补全。所花时间也多在这上面。