- 分享
卉图讲堂第2期--------字符串 · 1
- 2024-2-1 15:17:04 @
字符串毕竟是个变量,比数字运算复杂也是可以理解的吧
众所周知,字符串是一种独特的数据类型,而且与各种算法都几乎百搭,例如排序、高精、解码、进制......
今天讲讲几个字符串玩法
1.“按字典序排序”是个啥?
不少题里面都出现过这个名词,我敢保证很少有人第一次看到这个词不是懵的
好好想想,是不是学过个东西叫ASCII码?字典序就是按照两个字符串中首个不同字符的ASCII码值的顺序进行的排序 比如在C++眼里"azzz"<"baaa",因为前者的与后者的首个不同的字符中,前者的更大
而且C++特别贴心,两个字符串可以直接判断字典序大小,所以你就可以做出下面这道题:
输入一个,再输入个数字字符串,输出这几个数字字符串能拼成的最大数字
参考答案:
#include<bits/stdc++.h>
using namespace std;
bool cmp(string x,string y){
return x+y>y+x;
}
string a[1001];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i];
}
}
2.顺带提一下高精度
高精度,简单来说就是把输入的超长数字当成字符串,再把每一个数位单独计算,使运算范围更大,以高精加为例
#include<bits/stdc++.h>
using namespace std;
int aa[100001];
int bb[100001];
int cc[100002];
int main(){
string a,b;
cin>>a>>b; //把数字当成字符串输入
int len=max(a.length(),b.length());
for(int i=a.length()-1;i>=0;i--){
aa[a.length()-i]=a[i]-'0'; //按照数位进行转换
}
for(int i=b.length()-1;i>=0;i--){
bb[b.length()-i]=b[i]-'0';
}
for(int i=1;i<=len;i++){
cc[i]+=aa[i]+bb[i]; //cc存加和
cc[i+1]=cc[i]/10; //考虑进位情况
cc[i]%=10; //同样是进位
}
if(cc[len+1]!=0){
len++; //最后一个进位特判
}
for(int i=len;i>=1;i--){
cout<<cc[i]; //因为转换、运算都是反向的,输出也反向
}
return 0;
}
OK,今天先码到这,剩下的下期再聊
4 条评论
-
zoudonghan LV 7 @ 2024-7-1 20:54:27
推荐一个十分好用の函数 reverse(<开始下标>,<结束下标>)
-
2024-2-5 21:31:51@
vocal
-
2024-2-5 21:31:12@
啊?
-
2024-2-1 16:20:41@
vocal
- 1