题目重述
读入一个有或者没有用逗号进行千位分隔的整数, 如果是用了逗号分隔, 则输出没有逗号分隔的整数, 否则输出用逗号进行千位分隔的整数.
Standard Input
有多组测试数据. 输入的第一行是整数T(1<=T<=100), 表示随后测试数据的组数. 每组测试数据占一行, 由一个有或者没有用逗号进行千位分隔的整数组成, 整数的取值区间为[0, 10^200].
Standard Output
对应每组测试数据, 输出一行要求的结果.
思路:首先判断这个长数字字符串是否含有逗号?用
f
l
a
g
flag
flag进行打标记!一个坑点是进循环后初始化!
如果含有逗号,那就直接输出,遇到逗号则
c
o
n
t
i
n
u
e
continue
continue即可。
如果没有逗号,分成三种情况(均分成3 3 3…前面剩余1个 前面剩余2个)用**%的运算**能实现!【补充:其实我刚开始的思路比较委婉,将字符串倒过来,这样三个三个数就方便多了吧,但是不方便将逗号插入字符串数组中(位置发生“偏移”),所以没有选择这样的方法】在每一种情况中用cnt变量进行计数,然后思路就是在需要输出逗号的位置输出即可。【犯错点:末尾输出了一个逗号怎么办?添加上
c
n
t
!
=
s
.
l
e
n
g
t
h
(
)
cnt!=s.length()
cnt!=s.length()就能实现;如果这个很短,比如在余数为2的情况下,输入12那么在
c
n
t
=
=
2
cnt==2
cnt==2那里就会输出逗号在结尾,这时候一样的思路,只需要在
i
f
if
if中补上
c
n
t
!
=
s
.
l
e
n
g
t
h
(
)
cnt!=s.length()
cnt!=s.length()
实现该算法的代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
bool flag=0;
string s;
int T;
cin>>T;
while(T--){
cin>>s;
flag=0;
for(int i=0;i<s.length();i++){
if(s[i]==','){
flag=1;
break;
}
}
//cout<<"flag="<<flag<<" ";//通过这一行输出调试发现每次进while后没有初始化flag
if(flag){
for(int i=0;i<s.length();i++){
if(s[i]==',') continue;
else cout<<s[i];
}
cout<<endl;
}else if(!flag){
if(s.length()%3==0){
int cnt=0;
for(int i=0;i<s.length();i++){
cout<<s[i];
cnt++;
if(cnt%3==0&&cnt!=s.length()) cout<<',';
}
cout<<endl;
}else if(s.length()%3==2){
int cnt=0;
for(int i=0;i<s.length();i++){
cout<<s[i];
cnt++;
if(cnt==2&&cnt!=s.length()) cout<<',';
else if((cnt-2)%3==0&&cnt!=s.length()) cout<<',';
}
cout<<endl;
}else if(s.length()%3==1){
int cnt=0;
for(int i=0;i<s.length();i++){
cout<<s[i];
cnt++;
if(cnt==1&&cnt!=s.length()) cout<<',';
else if((cnt-1)%3==0&&cnt!=s.length()) cout<<',';
}
cout<<endl;
}
}
}
return 0;
}
一定要善用输出调试的方法哦!提交时也一定要记得注释掉!