这是acwingPAT甲级辅导课讲的第一题,很简单,之所以写出来,是因为看到y总在解题过程中的步骤和方法很好、很有条理、非常清晰,我觉得学会这种方法,比多学一些算法更有用。
通过样例及题干,我们分析我们需要做的事情有下面几步:
①输入a、b;
②得到a+b的和;
③把和转化为字符串;
④在字符串中添加逗号;
⑤输出字符串。
第三步直接用to_string函数,第四步复杂点。
使用模拟的方法来解决第四步,我们需要重新定义一个字符串,将旧的字符串通过遍历加到新的字符串中,同时在该加逗号的位置加上逗号。
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
int c=a+b;
string num=to_string(c);
string res;
for(int i=num.size()-1,j=0;i>=0;i--)//j计数使用,用来判断是否够3位加逗号
{
res=num[i]+res;//从最低位到最高位加到新的字符串res上
++j;
if(j%3==0&&num[i-1]!='-'&&i)//每隔三位一个逗号,条件是j能被3整除,同时这个字符前面不能没有数或者前面的数是负号
res=','+res;
}
cout<<res;
return 0;
}
个人觉得做每一道算法题,都要有这样的清晰的条理、思路,该按步骤按步骤,该模拟模拟,这样才能真正的有进步,做的题才有用。
还有一个对于解题至关重要的点是,要能通过题目和数据要求,准确地知道自己要求什么,要写的程序解决哪一个点,从而对这个点再分析。比如这道题很简单,但是第四步中加逗号,需要判断字符串首位是不是能被3整除,以及当前字符能被3整除它前面那位却不能是负号,如果你只是随意做一下,你会发现你很乱没有头绪,但当你对每一步都有清晰的条理之后,你会发现这道题简单了很多。