小知识:
- 这道题用到了
to_string()
函数:把数字变为字符串。 - 那么,怎么把数字变为字符串呢?:
字符数字 - '0'
就好啦! reverse(str.begin(), str.end())
:可以把字符串倒序输出,要加#include<algorithm>
哦
小步骤:
cin >> a >> b
a + b
- 和 转为 字符串
- 在
j % 3 == 0 && num[i - 1] != '-' && i
时加入$’,’$
想不明白就模拟个样例,记得多模拟几个想想特殊情况
小错误:
-
刚开始智障的我写的是
res += num[i]
,发现答案是倒序的。怎么也找不到为什么,后来发现…
res = res + num[j]
:是把当前字符加在答案后面
而res += num[j]
:等同于res = res + num[i]
,是把当前字符加在答案后面,所以输出是倒序的… -
循环条件是:
if (j % 3 == 0 && num[i - 1] != '-' && i)
每一次都是先把原字符串的当前位放进答案,然后(对于原字符串的这一位) 判断在当前答案的下一位上是否该放’,’
那么什么情况加$’,’$呢:-
j 是count答案的位数,每有3位,得加个$’,’$,即
j % 3 == 0
-
如果和为负数,就不能在本来是’-‘的位置(也是num[0]的位置)写$’,’$,即原字符串的下一位也就是
num[i - 1] != ' ,'
- i = 0 时整个字符串刚好结束,如果刚好是3倍,就不用再加$’,’$了(比如 -48 + 2)
-
#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 -- )
{
res = num[i] + res; // 每一次都是先把原字符串的当前位放进答案
++ j; // 然后对于原字符串的这一位,在当前答案的下一位上是否该放','
if (j % 3 == 0 && i && num[i - 1] != '-') res = ',' + res;
}
cout << res << endl;
return 0;
}
智障code:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int sum = a + b;
string num = to_string(sum);
string res;
for (int i = num.size() - 1, j = 0; i >= 0; i -- )
{
res += num[i];
j ++ ;
if (j % 3 == 0 && i && num[i - 1] != '-') res += ',';
}
reverse(res.begin(), res.end());
cout << res << endl;
return 0;
}
新手学的比较吃力,如果有错误欢迎您指出!!!
感谢大佬的题解 大佬犯的错误也犯了 看了 大佬的题解就全都理解了
好认真啊
棒~
555好难啊,我好笨啊
nice