AcWing 1473. A + B 格式
原题链接
简单
作者:
锦梨冲冲冲
,
2020-04-01 17:02:41
,
所有人可见
,
阅读 743
上课时间:周二、四 晚7:00-9:00
(一)C++中和字符串有关
string:用的比较多
char[]:效率比较高
(二)本题思路
①输入a,b
②计算a+b
③把和转化成字符串
④加入逗号(从后往前依次数,每数完3位加一个逗号,如果是最高位就不加)
(三)to_string()函数的内部逻辑//如果是自己实现会很麻烦,需要额外考虑负数和0的情况
string num;
int d = abs(c); //转换成对正数做判断
while (d)
{
num = char (d % 10 + '0' ) + num; //倒着加
d /= 10;
}
if( c < 0 ) num = '-' + num; //如果是负数,需要添负号
if(!c) num = "0"; //特判一下c是0的情况
(四)循环条件if (j % 3 == 0 && num[i - 1] != ‘-‘ && i)
每一次都先把原字符串的最后一位放进答案,然后对当前位判断:当前位的的左边位上是否该放‘,’
该放‘,’的情况:
1.每数完三位加一个逗号
① j % 3 == 0 :j是3的整数倍,则加逗号
2.如果是最高位就不加逗号
② num[i - 1] != '-' :如果当前位的下一位是负号,则不加逗号
③ i>0 :当i=0时,也不用加逗号(i>0时加,i=0时不加)
闫式优美题解
#include<iostream>
using namespace std;
int main()
{
int a , b;
cin >> a >> b;//一般用string输入
int c = a +b ;
string num = to_string(c);//to_string()函数将一串数字(整数、浮点数均可)转换为字符串格式
string res;//答案
for(int i = num.size()-1 , j = 0 ; i >= 0 ; i--) //从后往前遍历,字符串最后一个字符的下标为num.size()
{
res = num[i] + res ; //在答案res的前边加一个数字,倒着往回加
++j;//计数器
if(j % 3 == 0 && num[ i - 1 ] != '-' && i)//当前数组的个数是三的倍数且改为不是最高位,就加一个逗号
res = ',' + res;//在前边补上一个逗号
}
cout << res << endl;
return 0;
}